在PythonGTK+;中处理多个组合框是最好的方法吗;?

在PythonGTK+;中处理多个组合框是最好的方法吗;?,python,pygtk,Python,Pygtk,我正在尝试编写一些配置GUI,许多GUI都有两个或更多的组合框,以及其他东西。我不喜欢复制东西,让它到处都一样,冗长,几乎不可读。 我想问一下你自己在这个问题上的看法,创建sotcha类好吗?如果不好,如何更好地处理它 ./listaRozwijana-experimentalne.py #! /usr/bin/env python # -*- coding: utf-8 -*- # # Author: Camelek.AmigaRulez # License: Public Domain #

我正在尝试编写一些配置GUI,许多GUI都有两个或更多的组合框,以及其他东西。我不喜欢复制东西,让它到处都一样,冗长,几乎不可读。 我想问一下你自己在这个问题上的看法,创建sotcha类好吗?如果不好,如何更好地处理它

./listaRozwijana-experimentalne.py

#! /usr/bin/env python
# -*- coding: utf-8 -*-
#
# Author: Camelek.AmigaRulez
# License: Public Domain
# Date: poniedziałek, 14 listopad 2011 15:41:36
#

import gtk, gobject

class KlasaComboBox():
    def __init__(self, comboboxprojekt, comboboxnazwa, comboboxlista):
        self.cmb = comboboxprojekt.get_object(comboboxnazwa);

        self.liststore = gtk.ListStore(gobject.TYPE_STRING);
        for self.wpis in comboboxlista:
            self.liststore.append([self.wpis]);

        self.cmb.set_model(self.liststore);
        self.komorka = gtk.CellRendererText();
        self.cmb.pack_start(self.komorka, True);
        self.cmb.add_attribute(self.komorka, 'text',0);

    def get_active(self):
        return(self.cmb.get_active());

    def get_active_text(self):
        return(self.cmb.get_active_text());

    def wyswietl(self):
        print 'Wybrałeś', self.cmb.get_active_text(), 'jego indeks na tej liście to:', self.cmb.get_active();

class KlasaGlowna():
    def __init__(self):
        self.projekt = gtk.Builder();
        self.projekt.add_from_file("./gui/okienkoDwochListRozwijanych.ui");

        self.okienko = self.projekt.get_object("window1");
        self.projekt.connect_signals(self);

        self.lista1 = ["Motorola 68000"];
        self.lista1.append ("Intel MCS-51");
        self.lista1.append ("Cell");
        self.lista1.append ("Zilog Z80");
        self.cmb1 = KlasaComboBox(self.projekt, "combobox1", self.lista1);

        self.lista2 = ["Pierwszy", "Drugi", "Trzeci", "Czwarty", "Piąty"];
        self.cmb2 = KlasaComboBox(self.projekt, "combobox2", self.lista2);

    def uruchom(self):
        self.okienko.show_all();
        gtk.main();

    def on_combobox1_changed(self, widget, data=None):
        self.cmb1.wyswietl();

    def on_combobox2_changed(self, widget, data=None):
        self.cmb2.wyswietl();

    def on_window1_delete_event(self, widget, event, data=None):
        gtk.main_quit();

if __name__ == "__main__":
    app = KlasaGlowna();
    app.uruchom();
else:
    sys.exit(1);
./gui/okienkoDwochListRozwijanych.ui

<?xml version="1.0"?>
<interface>
  <requires lib="gtk+" version="2.16"/>
  <!-- interface-naming-policy project-wide -->
  <object class="GtkWindow" id="window1">
    <property name="title" translatable="yes">Wybierz sw&#xF3;j ulubiony procesor</property>
    <property name="window_position">center</property>
    <signal name="delete_event" handler="on_window1_delete_event"/>
    <child>
      <object class="GtkVBox" id="vbox2">
        <property name="visible">True</property>
        <property name="orientation">vertical</property>
        <child>
          <object class="GtkVButtonBox" id="vbuttonbox1">
            <property name="visible">True</property>
            <property name="orientation">vertical</property>
            <property name="layout_style">spread</property>
            <child>
              <object class="GtkComboBox" id="combobox1">
                <property name="visible">True</property>
                <signal name="changed" handler="on_combobox1_changed"/>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">False</property>
                <property name="position">0</property>
              </packing>
            </child>
            <child>
              <object class="GtkComboBox" id="combobox2">
                <property name="visible">True</property>
                <signal name="changed" handler="on_combobox2_changed"/>
              </object>
              <packing>
                <property name="expand">False</property>
                <property name="fill">False</property>
                <property name="position">1</property>
              </packing>
            </child>
          </object>
          <packing>
            <property name="position">0</property>
          </packing>
        </child>
      </object>
    </child>
  </object>
</interface>

Wybierz sw和xF3;乌卢比奥手术室
居中
真的
垂直的
真的
垂直的
传播
真的
假的
假的
0
真的
假的
假的
1.
0

你不是唯一一个有这种想法的人;是为了解决这个问题而创建的。从PyGTK 2.24开始提供。如果您不能使用PyGTK 2.24,那么您的解决方案似乎相当合理。

非常感谢您的回答:]我将尝试更改ComboBox的一些内容,使其成为ComboBoxText。我以前听说过ComboBoxText,但Glade没有提供制作它们的方法。我使用Linux Debian Squence,也许在Glade的新版本中有sotcha选项可以让它变得简单。无论如何,如果我能做到,我会发布这个技巧的工作示例:@Camelek你可以在Glade文件中保留一些空白,然后在代码中添加
ComboBoxText
元素。只需要额外的一两行代码。
ComboBoxText
元素在编程中非常容易管理。不幸的是,我会等到Wheezy使用ComboxText:>的荣耀,因为到目前为止,我只获得了PyGTK+的2.17版。这当然不会阻止我,这只是我路上的又一次冒险:D谢谢你们的快速回答:]