Python GTK+ 3 只拉出一个文件选择器对话框?

标签 python gtk

我正在尝试创建一个使用 Gtk FileChooserDialog 对话框的程序。我按照教程 here , 它有效。但是,我希望只是弹出对话框,而不必处理实际的 Gtk 窗口。

我已经尝试将教程中位于 on_file_clicked() 函数中的代码放入 __init__ 函数中(并稍微调整一下)所以在删除 __init__ 中已有的代码后,它看起来会起作用):

class FileChooserWindow(Gtk.Window):

    def __init__(self):
        global path

        dialog = Gtk.FileChooserDialog("Please choose a file", self,
            Gtk.FileChooserAction.OPEN,
            (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
             Gtk.STOCK_OPEN, Gtk.ResponseType.OK))

        self.add_filters(dialog)

        response = dialog.run()
        if response == Gtk.ResponseType.OK:
            print("Open clicked")
            print("File selected: " + dialog.get_filename())
            path = dialog.get_filename()
            dialog.destroy()
        elif response == Gtk.ResponseType.CANCEL:
            print("Cancel clicked")
            dialog.destroy()

    def add_filters(self, dialog):
        filter_any = Gtk.FileFilter()
        filter_any.set_name("Any files")
        filter_any.add_pattern("*")
        dialog.add_filter(filter_any)

        filter_text = Gtk.FileFilter()
        filter_text.set_name('Text files')
        filter_text.add_mime_type('text/plain')
        dialog.add_filter(filter_text)

        filter_py = Gtk.FileFilter()
        filter_py.set_name('Python files')
        filter_py.add_mime_type('text/x-python')
        dialog.add_filter(filter_py)

        filter_img = Gtk.FileFilter()
        filter_img.set_name('Image')
        filter_img.add_mime_type('image/*')
        dialog.add_filter(filter_img)

win = FileChooserWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

但它只是返回这个错误:

Traceback (most recent call last):
  File "base.py", line 152, in <module>
    win = FileChooserWindow()
  File "base.py", line 38, in __init__
    Gtk.STOCK_OPEN, Gtk.ResponseType.OK))
  File "/usr/lib/python3/dist-packages/gi/overrides/__init__.py", line 175, in new_init
    return super_init_func(self, **new_kwargs)
  File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 500, in __init__
    self._init(*args, **new_kwargs)
  File "/usr/lib/python3/dist-packages/gi/overrides/__init__.py", line 175, in new_init
    return super_init_func(self, **new_kwargs)
  File "/usr/lib/python3/dist-packages/gi/overrides/__init__.py", line 175, in new_init
    return super_init_func(self, **new_kwargs)
TypeError: could not convert value for property `transient_for' from FileChooserWindow to GtkWindow

有谁知道 Gtk FileChooserDialog 对话框的正确方法?

最佳答案

当您在第 6 行声明对话框时:

dialog = Gtk.FileChooserDialog("Please choose a file", self,  

self 是对话框的父级。要创建一个没有父项的对话框,请将其设置为 None,如下所示:

dialog = Gtk.FileChooserDialog("Please choose a file", None,

关于Python GTK+ 3 只拉出一个文件选择器对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29977125/

相关文章:

python - 类型错误 : 'data' is an invalid keyword argument for this function

c++ - 将自定义 GTK+ 小部件编译为 C++

c - 【C初学】GTK+及初学题

javascript - SyntaxError 无效字符 '\u8220'

python - Macosx 上的 gtk 问题

python - python 中的 xml 解析 : how to capture child's text when it is placed after grandchildren in the xml tree

python - SciKit Gradient Boosting - 如何将预测与初始表结合起来?

python - 具有零值的 Pandas 堆积面积图

treeview - Vala:我怎么知道编辑过的信号是从哪一列发出的?

python - 比较Python中集合之间的相似度