我正在调试 PyGTK 程序中的用户体验错误(尽管该问题可能也适用于 GTK),并且突然意识到该错误是“触发”的,具体取决于执行程序的用户。
我将问题简化为 PyGTK 中的一个非常简单的脚本:
import gtk
class PyApp(gtk.Window):
def __init__(self):
super(PyApp, self).__init__()
self.set_size_request(250, 100)
self.set_position(gtk.WIN_POS_CENTER)
self.connect("destroy", gtk.main_quit)
self.set_title("Message dialogs")
ques = gtk.Button("Question")
self.add(ques)
ques.connect("clicked", self.on_ques)
self.show_all()
def on_ques(self, widget):
md = gtk.MessageDialog(self,
gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_QUESTION,
gtk.BUTTONS_YES_NO, "Are you sure to quit?")
md.run()
md.destroy()
PyApp()
gtk.main()
当我以我自己的身份在我的盒子上运行它时,我得到了这个对话框:
Are you sure to quit?
<Yes> No
当我以root身份在我的盒子上运行它时,我得到这个对话框:
Are you sure to quit?
<No> Yes
两个用户都有相同的 .gtkrc-2.0 文件,我使用 KDE,并且在我的主目录中没有任何明显的与 GTK 相关的隐藏目录,所以我不明白这种偏好来自哪里。
在有人建议 md.set_default_response() 之前,这并不是我想要的。创建对话框后,我尝试设置 md.set_default_response(gtk.RESPONSE_YES) ,是的,选择了“是”按钮,但左侧仍然打印了“否”。
我想了解这种行为的来源,并尝试一劳永逸地解决它。