如何使 filename/path 来自 Gtk+ (Python 3.4) FileChooserDialog 全局可访问
How to make filename/path from Gtk+ (Python 3.4) FileChooserDialog accessible globally
我有一些代码使用 Python 3.4 中的 Gtk+ FileChooserDialog 来允许用户 select 一个文件。
然后,它应该关闭对话框(显然)并继续执行用户选择文件后的代码。然而,发生的情况是用户 selects 他们的文件,代码继续,但对话框并没有像它应该的那样消失。
我以前遇到过这个问题,我们当时找出了它发生的原因并解决了它,但现在它又发生了,虽然我知道是什么原因造成的,但我不知道如何真正解决它。
这是我的代码:
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
这里的问题是,由于我不知道的原因,如果我在 FileChooser()
class' __init__()
函数中有 global path
声明,对话框会获胜'消失。
如果我删除那个 global path
声明,对话框就会消失,但是当我稍后尝试访问 path
变量时,我会在程序中得到一个 NameError: name 'path' is not defined
!
我也试过在程序开始时使 path
全局化,但我仍然遇到 NameError。
我怎样做才能使该变量稍后在我的程序中可访问,同时仍然使对话框消失?
将 path
变量视为 FileChooser()
的实例。它提供了一个逻辑端,让代表 FileChooser()
.
的对话框访问路径
class FileChooser():
def __init__(self):
#Stores your path
self.path = None
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())
self.path = dia.get_filename()
elif response == Gtk.ResponseType.CANCEL:
print("Cancel clicked")
dia.destroy()
创建对象时。
dialog = FileChooser()
您可以通过以下方式访问:
dialog.path
我有一些代码使用 Python 3.4 中的 Gtk+ FileChooserDialog 来允许用户 select 一个文件。
然后,它应该关闭对话框(显然)并继续执行用户选择文件后的代码。然而,发生的情况是用户 selects 他们的文件,代码继续,但对话框并没有像它应该的那样消失。
我以前遇到过这个问题,我们当时找出了它发生的原因并解决了它,但现在它又发生了,虽然我知道是什么原因造成的,但我不知道如何真正解决它。
这是我的代码:
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
这里的问题是,由于我不知道的原因,如果我在 FileChooser()
class' __init__()
函数中有 global path
声明,对话框会获胜'消失。
如果我删除那个 global path
声明,对话框就会消失,但是当我稍后尝试访问 path
变量时,我会在程序中得到一个 NameError: name 'path' is not defined
!
我也试过在程序开始时使 path
全局化,但我仍然遇到 NameError。
我怎样做才能使该变量稍后在我的程序中可访问,同时仍然使对话框消失?
将 path
变量视为 FileChooser()
的实例。它提供了一个逻辑端,让代表 FileChooser()
.
class FileChooser():
def __init__(self):
#Stores your path
self.path = None
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())
self.path = dia.get_filename()
elif response == Gtk.ResponseType.CANCEL:
print("Cancel clicked")
dia.destroy()
创建对象时。
dialog = FileChooser()
您可以通过以下方式访问:
dialog.path