gpt4 book ai didi

python - Python脚本中的Gtk.main_quit()实际上并没有退出Gtk主循环

转载 作者:行者123 更新时间:2023-12-01 04:43:39 24 4
gpt4 key购买 nike

我有一个项目,它使用 Gtk.FileChooserDialog 对象,显然,允许用户选择文件。然后,一旦选择了文件,对话框就会消失并且代码应该继续运行。

虽然对话框确实消失,但代码不会从Gtk.main()之后继续 - 我的代码似乎卡在Gtk主循环中。

代码如下:

from gi.repository import Gtk

class FileChooser(Gtk.FileChooserDialog):

def __init__(self):

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()
dia.destroy()
Gtk.main_quit() # <- Doesn't work?
elif response == Gtk.ResponseType.CANCEL:
print("Cancel clicked")
dia.destroy()
Gtk.main_quit() # <- Doesn't work?

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()
dialog.show_all()
Gtk.main()

我还尝试在创建 dia 对象后立即添加 dialog.connect('destroy', Gtk.main_quit) ,但这也不起作用.

是否存在一些明显的错误,导致调用 Gtk.main_quit() 不会使我的代码退出 Gtk 主循环?

最佳答案

如果您仅使用 FileChooserDialog,则不必执行 Gtk.main()Gtk.main_quit()。而且,从Gtk.FileChooserDialog继承是没有用的,可以删除。

这应该有效:

from gi.repository import Gtk

class FileChooser():

def __init__(self):

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):
pass # filters left out to make the snippet shorter

dialog = FileChooser()

关于python - Python脚本中的Gtk.main_quit()实际上并没有退出Gtk主循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29978261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com