Python/Glade/PyGTK - Проверьте, активен ли флажок

Изучив библиотеки и учебники PyGTK, я не смог найти точный ответ, который мне нужен, или, может быть, я просто что-то не так делаю...

Во всяком случае, я изучаю PyGTK и Glade, я нахожусь в процессе написания сценариев для простого приложения-загрузчика. Графический интерфейс приложения имеет три флажка, а затем кнопку отправки.

То, что я пытаюсь сделать, это получить статус флажков после нажатия кнопки отправки, таким образом, я могу продолжить свой скрипт для загрузки приложений в зависимости от того, установлены ли флажки в true или false.

Вот что у меня так далеко. (Еще очень ранние стадии и учимся на ошибках)

Python Script:

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>

Либо я не могу найти правильный способ вызова статуса, либо я нашел его, и я просто неправильно его использую... Любая помощь очень ценится, заранее спасибо!

2 ответа

Решение

Вам просто нужно вызвать метод get_active для галочки gtk, получить объект кнопки проверки из файла glade и вызвать метод get_active по событию click кнопки submit.

здесь фрагмент кода, чтобы быть более наглядным:

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()

надеюсь, это поможет вам.

В этом обратном вызове:

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

на самом деле вы создаете совершенно новую кнопку переключения, которая невидима, потому что вы не добавляете ее в любой другой виджет, а затем запрашиваете ее статус. Вот почему он не отвечает, как вы ожидаете.

Другие вопросы по тегам