Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python GTK+;3是否只调出一个文件选择器对话框?_Python_Gtk - Fatal编程技术网

Python GTK+;3是否只调出一个文件选择器对话框?

Python GTK+;3是否只调出一个文件选择器对话框?,python,gtk,Python,Gtk,我正在尝试创建一个使用Gtk FileChooserDialog对话框的程序。我遵循了教程,它很有效。但是,我希望只弹出对话框,而不必处理实际的Gtk窗口 在删除\uuuu init\uuu中已有的代码后,我尝试将教程中位于on\u clicked()函数中的代码放入\uuuu init\uuuu函数中(并稍微调整它,使其看起来可以工作): class FileChooserWindow(Gtk.Window): def __init__(self): global p

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

在删除
\uuuu init\uuu
中已有的代码后,我尝试将教程中位于
on\u clicked()
函数中的代码放入
\uuuu init\uuuu
函数中(并稍微调整它,使其看起来可以工作):

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
Traceback (most recent call last):
  File "scriptname.py", line 57, in <module>
    win.connect("delete-event", Gtk.main_quit)
TypeError: object at 0x7ff81d5dedc0 of type FileChooserWindow is not initialized
CRITICAL: Exiting due to uncaught exception <class 'TypeError'>
回溯(最近一次呼叫最后一次):
文件“base.py”,第152行,在
win=FileChooserWindow()
文件“base.py”,第38行,在_init中__
Gtk.STOCK_OPEN,Gtk.ResponseType.OK))
文件“/usr/lib/python3/dist packages/gi/overrides/_init__.py”,第175行,在new_init中
返回超级初始化函数(self,**新建)
文件“/usr/lib/python3/dist packages/gi/overrides/Gtk.py”,第500行,在__
self._init(*args,**new_kwargs)
文件“/usr/lib/python3/dist packages/gi/overrides/_init__.py”,第175行,在new_init中
返回超级初始化函数(self,**新建)
文件“/usr/lib/python3/dist packages/gi/overrides/_init__.py”,第175行,在new_init中
返回超级初始化函数(self,**新建)
TypeError:无法将属性“transient_for”的值从FileChooserWindow转换为GtkWindow

有人知道只打开Gtk文件选择器对话框的正确方法吗?

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

dialog = Gtk.FileChooserDialog("Please choose a file", self,  
self
是该对话框的父级。要创建没有父级的对话框,请将其设置为
None
,如下所示:

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

@上述Seths解决方案因以下错误而崩溃:

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
Traceback (most recent call last):
  File "scriptname.py", line 57, in <module>
    win.connect("delete-event", Gtk.main_quit)
TypeError: object at 0x7ff81d5dedc0 of type FileChooserWindow is not initialized
CRITICAL: Exiting due to uncaught exception <class 'TypeError'>