私は 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) を設定しようとしましたが、はい、「はい」ボタンが選択されますが、左側に「いいえ」が表示されます。
この動作がどこから来たのかを理解し、それを完全に修正したいと思います。