[我有一些代码使用Python 3.4中的Gtk + FileChooserDialog来允许用户选择文件。
然后,应该(显然)关闭对话框并继续执行用户选择文件后的代码。但是,发生的情况是用户选择了他们的文件,并且代码继续执行,但是对话框并没有像应有的那样消失。
我以前曾遇到过这个问题,我们已经弄清楚了为什么会发生此问题并解决了它,但现在又又发生了,尽管我知道是什么原因,但我不知道如何真正解决它。
这是我的代码:
from gi.repository import Gtk class FileChooser(): def __init__(self): global path dia = Gtk.FileChooserDialog("Please choose a file", None, Gtk.FileChooserAction.OPEN, (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OPEN, Gtk.ResponseType.OK)) self.add_filters(dia) response = dia.run() if response == Gtk.ResponseType.OK: print("Open clicked") print("File selected: " + dia.get_filename()) path = dia.get_filename() elif response == Gtk.ResponseType.CANCEL: print("Cancel clicked") dia.destroy() def add_filters(self, dia): filter_any = Gtk.FileFilter() filter_any.set_name("Any files") filter_any.add_pattern("*") dia.add_filter(filter_any) filter_text = Gtk.FileFilter() filter_text.set_name('Text files') filter_text.add_mime_type('text/plain') dia.add_filter(filter_text) filter_py = Gtk.FileFilter() filter_py.set_name('Python files') filter_py.add_mime_type('text/x-python') dia.add_filter(filter_py) filter_img = Gtk.FileFilter() filter_img.set_name('Image') filter_img.add_mime_type('image/*') dia.add_filter(filter_img) dialog = FileChooser() # path variable will be used after this point
这里的问题是,由于我不知道的原因,如果我在
global path
类的FileChooser()
函数中具有__init__()
声明,该对话框将不会消失。
如果删除global path
声明,对话框将消失,但是稍后当我尝试访问NameError: name 'path' is not defined
变量时在程序中出现了path
!
我也尝试在程序开始时将path
设置为全局,但是我仍然收到NameError。
如何使此变量在以后的程序中访问,同时仍然使对话框消失,该怎么办?
我有一些代码使用Python 3.4中的Gtk + FileChooserDialog来允许用户选择文件。然后,应该关闭对话框(显然)并继续执行代码...
将path
变量视为FileChooser()
的实例。它提供了逻辑上的终点,以使代表FileChooser()
的对话框访问路径。
小注:self.path必须重命名为self.fpath之类的,因为每个gtk小部件都已经具有路径属性。