im unten stehenden Quelltext möchte ich über die ComboBox eine entsprechende Funktion aufrufen. In Zeile 7 - 26 habe ich die Funktionen außerhalb der Klasse definiert - auf diesem Weg möchte ich die strikte Trennung zwischen Logik und Gui beibehalten. In Zeile 57 habe ich eine Liste erstellt, die dann in Zeile 66 als Item der Combobox zum Inhalt gemacht wird, das heißt, die Combobox wird gefüllt. In Zeile 67 habe ich die Combobox mit der combo_chosen-Funktion verbunden. Diese Funktion sehen wir außerhalb der Klasse in Zeile 28. Dort habe ich eine Liste angelegt, mit all den Funktionen. Diese Funktion hat das Argument current_combo_index. Darüber soll der eben angeklickte Index ermittelt werden. Wir sehen hier zwei print-Anweisungen. In der ersten print-Anweisung soll nur der eben angeklickte Index ausgegeben werden. In der zweiten Anweisung soll dann durch den Index das entsprechende Element aus der Liste angesprochen werden. Wenn also Index 5 ais der Combobox angeklickt wurde, dann soll auch das 5. Element aus der liste angesprochen werden. Tut das Programm nicht. Er spricht alle Funktionen an. Ich möchte also, dass ein bestimmtes Element aus der Liste angesprochen wird. Und da eine Liste über ein Index verfügt, wollte ich diese darüber ansprechen.
Mein allgemeines Anliegen ist es, dass ich der if-Kaskade aus dem Weg gehen kann. Man könnte natürlich die Indexe einzeln abfragen und dementsprechend eine bestimmte Funktion aufrufen. Aber ich überlege gerade, ob man das irgendwie vermeiden kann. Nur komme ich nicht drauf.
Code: Alles auswählen
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import sys
from PyQt4.QtGui import QWidget, QApplication, QVBoxLayout, QFormLayout, QComboBox
def test_zero():
print " 0 item Pressed"
def test_one():
print " 1 item Pressed"
def test_two():
print " 2 item Pressed"
def test_three():
print " 3 item Pressed"
def test_four():
print " 4 item Pressed"
def test_five():
print " 5 item Pressed"
def test_six():
print " 6 item Pressed"
def combo_chosen(current_combo_index):
function_list = [test_zero(),
test_one(),
test_two(),
test_three(),
test_four(),
test_five(),
test_six()]
print "Index", current_combo_index
print "Elemen from List:", function_list[current_combo_index]
qt_app = QApplication(sys.argv)
class LayoutExample(QWidget):
def __init__(self):
QWidget.__init__(self)
self.setWindowTitle('Example Window')
# Create the QVBoxLayout that lays out the whole form
self.layout = QVBoxLayout()
# Create the form layout that manages the labeled controls
self.form_layout = QFormLayout()
self.combo_items = ['Item 1',
'Item 2',
'Item 3',
'Item 4',
'Item 5',
'Item 6']
# Create and fill the combo box to choose the combo
self.combo = QComboBox(self)
self.combo.addItems(self.combo_items)
self.combo.activated.connect(combo_chosen)
# Cdd the form layout to the main VBox layout
self.layout.addLayout(self.form_layout)
# Set the VBox layout as the window's main layout
self.setLayout(self.layout)
def run(self):
# Show the form
self.show()
# Run the qt application
qt_app.exec_()
# Create an instance of the application window and run it
app = LayoutExample()
app.run()
0 item Pressed
1 item Pressed
2 item Pressed
3 item Pressed
4 item Pressed
5 item Pressed
6 item Pressed
Index 5
Elemen from List: None