2011-11-15 12 views
1

PyGTKライブラリとチュートリアルを実行した後、私が探している正確な答えを見つけることができなかったかもしれません。Python/Glade/PyGTK - チェックボックスがアクティブであることを確認する

とにかく、私はPyGTKとGladeを学んでいます。私は簡単なダウンローダアプリケーションのスクリプトを作成中です。アプリケーションのGUIには3つのチェックボックスがあり、次に送信ボタンがあります。

私がしようとしているのは、送信ボタンを押した後のチェックボックスのステータスを取得することです。チェックボックスがtrueまたはfalseであるかどうかに基づいてアプリケーションをダウンロードするスクリプトを続行できます。

これまで私がこれまで持っていたことは次のとおりです。 (まだ非常に初期の段階との過ちから学ぶ)

のPythonスクリプト:

import sys 
try: 
    import pygtk 
    pygtk.require("2.0") 
except: 
    pass 
try: 
    import gtk 
    import gtk.glade 
except: 
    sys.exit(1) 


class GladeTest: 

    def __init__(self): 

     #Set the Glade file 
      filename = "gui.glade" 
      builder = gtk.Builder() 
      builder.add_from_file(filename) 
      builder.connect_signals(self) 

     #Create our dictionay and connect it 
      dic = { "btnSubmit_clicked" : self.btnSubmit_clicked, 
      "chkboxDropbox_toggled" : self.chkboxDropbox_toggled, 
      "MainWindow_destroy" : gtk.main_quit } 

     def btnSubmit_clicked(self, widget): 
      self.button = gtk.ToggleButton("chkboxDropbox_toggled") 
      status = self.button.get_active() 
      print status 

     def chkboxDropbox_toggled(self, widget): 
      print "" 




if __name__ == "__main__": 
    hwg = GladeTest() 
    gtk.main() 

グレード3 XML(gui.glade):

<?xml version="1.0" encoding="UTF-8"?> 
<interface> 
    <requires lib="gtk+" version="2.24"/> 
    <!-- interface-naming-policy project-wide --> 
    <object class="GtkAction" id="action1"/> 
    <object class="GtkWindow" id="MainWindow"> 
    <property name="visible">True</property> 
    <property name="can_focus">False</property> 
    <property name="title" translatable="yes">MainWindow</property> 
    <property name="resizable">False</property> 
    <property name="window_position">center</property> 
    <signal name="destroy" handler="MainWindow_destroy" swapped="no"/> 
    <child> 
     <object class="GtkVBox" id="vbox1"> 
     <property name="visible">True</property> 
     <property name="can_focus">False</property> 
     <child> 
      <object class="GtkLabel" id="label1"> 
      <property name="visible">True</property> 
      <property name="can_focus">False</property> 
      <property name="label" translatable="yes">Downloader</property> 
      <attributes> 
       <attribute name="style" value="normal"/> 
       <attribute name="size" value="300"/> 
      </attributes> 
      </object> 
      <packing> 
      <property name="expand">False</property> 
      <property name="fill">True</property> 
      <property name="position">0</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkCheckButton" id="chkboxDropbox"> 
      <property name="label" translatable="yes">Dropbox</property> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <property name="receives_default">False</property> 
      <property name="use_action_appearance">False</property> 
      <property name="draw_indicator">True</property> 
      <signal name="toggled" handler="chkboxDropbox_toggled" swapped="no"/> 
      <signal name="activate" handler="chkboxDropbox_active" swapped="no"/> 
      </object> 
      <packing> 
      <property name="expand">False</property> 
      <property name="fill">True</property> 
      <property name="position">1</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkCheckButton" id="chkboxPython"> 
      <property name="label" translatable="yes">Python</property> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <property name="receives_default">False</property> 
      <property name="use_action_appearance">False</property> 
      <property name="draw_indicator">True</property> 
      <signal name="toggled" handler="chkboxPython_checked" swapped="no"/> 
      </object> 
      <packing> 
      <property name="expand">False</property> 
      <property name="fill">True</property> 
      <property name="position">2</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkCheckButton" id="chkboxChrome"> 
      <property name="label" translatable="yes">Google Chrome</property> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <property name="receives_default">False</property> 
      <property name="use_action_appearance">False</property> 
      <property name="draw_indicator">True</property> 
      <signal name="toggled" handler="chkboxChrome_checked" swapped="no"/> 
      </object> 
      <packing> 
      <property name="expand">False</property> 
      <property name="fill">True</property> 
      <property name="position">3</property> 
      </packing> 
     </child> 
     <child> 
      <object class="GtkButton" id="btnSubmit"> 
      <property name="label" translatable="yes">Download/Run</property> 
      <property name="visible">True</property> 
      <property name="can_focus">True</property> 
      <property name="receives_default">True</property> 
      <property name="use_action_appearance">False</property> 
      <signal name="clicked" handler="btnSubmit_clicked" swapped="no"/> 
      </object> 
      <packing> 
      <property name="expand">False</property> 
      <property name="fill">True</property> 
      <property name="position">4</property> 
      </packing> 
     </child> 
     </object> 
    </child> 
    </object> 
</interface> 

どちらか私は正しいを見つけることができませんステータスを呼び出す方法、または私はそれを見つけた、私はそれを間違って使用しています...どんな助けも大歓迎です、事前に感謝!

答えて

4

gtkチェックボックスの "get_active"メソッドを呼び出すだけで、グライドファイルからチェックボタンのオブジェクトを取得し、送信ボタンのクリックイベントで "get_active"メソッドを呼び出す必要があります。ここ

、コードスニペットは、より記述されるように:

class GladeTest: 

    def __init__(self): 

     #Set the Glade file 
     filename = "gui.glade" 
     self.builder = gtk.Builder() 
     self.builder.add_from_file(filename) 
     self.builder.connect_signals(self) 

     #Create our dictionay and connect it 
     dic = { "btnSubmit_clicked" : self.btnSubmit_clicked, 
     "chkboxDropbox_toggled" : self.chkboxDropbox_toggled, 
     "MainWindow_destroy" : gtk.main_quit } 

    def btnSubmit_clicked(self, widget): 
     chkbt_chrome = self.builder.get_object("chkboxChrome") 
     print "ACTIVE--",chkbt_chrome.get_active() 
     # do same for rest of the check buttons 

     self.button = gtk.ToggleButton("chkboxDropbox_toggled") # if used for check box status then there is no need for this button. 

     status = self.button.get_active() 
     print status 

    def chkboxDropbox_toggled(self, widget): 
     print "" 


if __name__ == "__main__": 
    hwg = GladeTest() 
    gtk.main() 

希望は、それはあなたを助けるでしょう。このコールバックで

+0

これはまさに私が探していたものです!完璧に働いた。あなたの助けに感謝します。 :) – Dustin

1

def btnSubmit_clicked(self, widget): 
    self.button = gtk.ToggleButton("chkboxDropbox_toggled") 
    status = self.button.get_active() 
    print status 

あなたが実際にやっていることはあなたが他のウィジェットに追加していないので、目に見えない全く新しいトグルボタンを作成して、その状態のためにそれを求めています。そういうわけで、期待通りに反応していないのです。

+0

ああ、どこが間違っていたのか理解しています。助けてくれてありがとう! – Dustin

関連する問題