2012-06-08 3 views
6

私はPyGTKプログラムのユーザーエクスペリエンスバグをデバッグしていますが(GTKにもこの質問は当てはまるでしょうが)、プログラムを実行しているユーザーに応じてバグが「トリガされた」ことが突然認識されました。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 

私はこれを実行すると、 ルートとしての私のボックスに、私はこのダイアログが出ます:

Are you sure to quit? 
    <No> Yes 

両方のユーザーヘクタール同じ.gtkrc-2.0ファイルを使用しています。私はKDEを使用しています。私のホームディレクトリには明らかなGTK関連の隠しディレクトリがありません。

誰かがmd.set_default_response()を提案する前に、それは私が望むものではありません。ダイアログを作成した後でmd.set_default_response(gtk.RESPONSE_YES)を設定しようとしましたが、「はい」ボタンが選択されますが、左側には「いいえ」が表示されます。

この現象の原因はどこにあるのかを理解して、一度修正してみてください。

答えて

7

GTK + Cソースを見ると、私はついに答えを見つけました。

右の肯定ボタンの使用を主張するようですが、Windowsのようなプラットフォームでは、まず標準が肯定的です。 set_alternative_button_order()グローバルな設定と呼ばれるのgtk-代替ボタン-注文は1

に設定されているそして、答えの2番目の部分はKDE は、Windowsを模倣しようとする場合のボタンを並べ替えます。私が探していたことを知って、GTKを作るために/home/myuser/.kde/share/config/gtkrc-2.0:gtk-alternative-button-order = 1にあるKDEの中に別のgtkrc-2.0を見つけましたKDEの下で実行されているアプリケーションは、可能な限りGTK以外のアプリケーションに似ています。

私は決してシステムでrootとしてKDEを実行したことがなく、.kde /ディレクトリにそのような設定がないので、rootの動作が異なります。

話の教訓は、あなたが関係なく、あなたが得るもの、ダイアログのこのタイプでデフォルトボタンを設定してはならない、またはそれ以外の場合はGTKは最初のものがデフォルトになります、これは矛盾した行動につながるということです。私の場合、普通のGTKでは、プログラムを終了するためのデフォルトの答えはそれをするのではなく、WindowsやKDEでは終了することでした。

これは明らかで、これは同じ問題を抱えているプログラマーに役立ちます。

関連する問題