2011-11-14 28 views
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&#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> 

答えて

0

あなたはこの考えに一つだけじゃありません。この問題を解決するためにgtk.ComboBoxTextが作成されました。 PyGTK 2.24以降で利用できます。 PyGTK 2.24を使用できない場合、あなたのソリューションはかなり妥当であるようです。

+0

ありがとうございます:]私は、ComboBoxについてComboBoxTextにするためのいくつかの変更をしようとします。私はComboBoxTextについて以前聞いたことがあるが、Gladeはそれらを作る方法を提供していない。私はLinux Debian Squeezeを使っています。新しいバージョンのGladeには簡単にできるオプションがあります。とにかく、私が作ろうとすれば、そのトリックの実例を投稿します:] – Camelek

+0

@CamelekいつでもあなたのGladeファイルの空白を残して、あなたのコードに 'ComboBoxText'要素を追加することができます。 1行か2行余分なコードにすぎません。 'ComboBoxText'要素は、プログラム的に管理するのが非常に簡単です。 –

+0

Unfortunelly ComboBoxTextの栄光を使うために私はWheezyまで待つでしょう:>今のところ私はPyGTK +のバージョン2.17しか持っていないからです。それはもちろん、私を止めないでください、それは私の方法でちょうど別の冒険です:D素早い答えのためにみんなありがとう:] – Camelek

関連する問題