0
私はいくつかのGUIを作成しようとしています。多くのGUIには2つ以上のComboBoxがあります。私はものをコピーし、どこでも同じ、長く、そしてほとんど読めるものにしたくない。 私はその質問のあなた自身の言葉についてお聞きしたいですが、ソチカのクラスを作るのは良いのですか?複数のComboBoxをPython GTK +で処理する最善の方法ですか?
./listaRozwijana-experymentalne.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ó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>
ありがとうございます:]私は、ComboBoxについてComboBoxTextにするためのいくつかの変更をしようとします。私はComboBoxTextについて以前聞いたことがあるが、Gladeはそれらを作る方法を提供していない。私はLinux Debian Squeezeを使っています。新しいバージョンのGladeには簡単にできるオプションがあります。とにかく、私が作ろうとすれば、そのトリックの実例を投稿します:] – Camelek
@CamelekいつでもあなたのGladeファイルの空白を残して、あなたのコードに 'ComboBoxText'要素を追加することができます。 1行か2行余分なコードにすぎません。 'ComboBoxText'要素は、プログラム的に管理するのが非常に簡単です。 –
Unfortunelly ComboBoxTextの栄光を使うために私はWheezyまで待つでしょう:>今のところ私はPyGTK +のバージョン2.17しか持っていないからです。それはもちろん、私を止めないでください、それは私の方法でちょうど別の冒険です:D素早い答えのためにみんなありがとう:] – Camelek