Python PyGTK:gtk.FileChooserButton显示的文件夹与gtk.FileChooserButton.get_current_folder()不同
Python脚本中的gtk.FileChooserButton有问题。如果从按钮菜单中选择选项›其他…è,将打开gtk.filechooser对话框,您可以在其中选择新文件夹。如果我通过双击选择此新文件夹,并通过单击›打开è确认对话框,则所选文件夹名称将显示在gtk.FileChooserButton中,gtk.FileChooserButton.get_current_folder()的值将更改为所选文件夹的路径(如示例的状态栏所示)。这是预期的行为 但是,当我不是通过双击而是仅通过单击一次来选择新文件夹,而是通过单击›打开è来确认对话框时,所选文件夹名称显示在gtk.FileChooserButton中,但是gtk.FileChooserButton.get_current_folder()中的路径不是所选文件夹的路径,而是其父文件夹的路径 这是一个bug还是我的脚本中有错误?按钮上的文件夹名称应始终与gtk.FileChooserButton.get_current_folder()相同。这里可以做什么?谢谢Python PyGTK:gtk.FileChooserButton显示的文件夹与gtk.FileChooserButton.get_current_folder()不同,python,gtk,pygtk,filechooser,Python,Gtk,Pygtk,Filechooser,Python脚本中的gtk.FileChooserButton有问题。如果从按钮菜单中选择选项›其他…è,将打开gtk.filechooser对话框,您可以在其中选择新文件夹。如果我通过双击选择此新文件夹,并通过单击›打开è确认对话框,则所选文件夹名称将显示在gtk.FileChooserButton中,gtk.FileChooserButton.get_current_folder()的值将更改为所选文件夹的路径(如示例的状态栏所示)。这是预期的行为 但是,当我不是通过双击而是仅通过单击一次来
#!/usr/bin/python
# -*- coding: utf-8 -*-
import gtk, os
class MainClass(object):
def __init__(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_position(gtk.WIN_POS_CENTER)
self.window.set_default_size(400, 100)
self.window.connect("delete_event", self.delete_event)
self.window.connect("destroy", self.destroy)
self.window.set_border_width(6)
self.vbox1 = gtk.VBox(False, 0)
self.window.add(self.vbox1)
self.filechooserdialog1 = gtk.FileChooserDialog("Select a folder…", None, gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
self.filechooserdialog1.set_default_response(gtk.RESPONSE_OK)
self.filechooserbutton1 = gtk.FileChooserButton(self.filechooserdialog1)
self.filechooserbutton1.set_current_folder(os.environ['HOME'])
self.filechooserbutton1.connect('current-folder-changed', self.tell_folder)
self.vbox1.pack_start(self.filechooserbutton1, True, False, 0)
self.statusbar1 = gtk.Statusbar()
self.vbox1.pack_start(self.statusbar1, False, False, 0)
self.context_id = self.statusbar1.get_context_id("status")
self.window.show_all()
def tell_folder(self, data=None):
self.statusbar1.push(self.context_id, self.filechooserbutton1.get_current_folder())
def delete_event(self, widget, event, data=None):
return False
def destroy(self, data=None):
gtk.main_quit()
def main(self):
gtk.main()
if __name__ == "__main__":
MyApp = MainClass()
MyApp.main()
您正在收听的信号仅在文件选择器中的视图文件夹更改时发出,而不是在父文件夹中选择文件夹时发出。
get\u current\u folder()
,它将告诉您正在查看哪个文件夹,而不是选择哪个文件夹。因此,代码中出现的情况是,双击首先更改了当前文件夹,然后“按下”确定
听FileChooserButton
的文件集
信号似乎更合适,尽管我不能100%确定如何检查用户是否单击了任何按钮/退出了对话。要获取所选内容,如果一次只允许选择一个内容,可以使用文件选择器的获取文件名()
(或者获取文件名()
,如果允许多选)。不幸的是,我无法测试解决方案,因为我在错误的计算机上,但它至少会引导您走向正确的方向
作为旁注,我发现在需要对话框时,只需调用FileChooserDialog
的run()
,并捕获它作为响应返回的内容(单击了什么按钮),然后使用get\u filename()
如果您想要当前文件夹,最好监视当前文件夹更改的信号,然后您可以在回调中使用获取当前文件夹,但只能在回调中使用。这是一个不错的解决办法
def on_current_folder_changed(widget):
widget._folder = widget.get_current_folder()
def on_file_set(widget):
# Lock that value in.
if widget.get_current_folder() != widget._folder:
widget.set_current_folder(widget._folder)
非常感谢。将get_current_folder()更改为get_filename(),成功了。Ylsne…很高兴这有帮助。。。也许你应该接受这个答案。