Buttons etc mit Qt Designer

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
möppi
User
Beiträge: 39
Registriert: Samstag 29. März 2014, 09:18

Hi,
ich habe bisher immer Tkinter für die GUI Programmierung verwendet. Eine wesentlich elegantere Möglichkeit bietet sich mit Qt Designer. Ich bin allerdings nicht so sehr mit dem Qt tool vertraut und finde nur wenige Tutorials, die einen leichten Einstieg bieten. Die Oberfläche möchte ich mit dem Designer programmieren, allerdings die Verknüpfungen der Widgets mit Funktionen "von Hand" programmieren, also nicht den "Signals and Slots Editer" verwenden. Wie Verknüpfe ich zum Beispiel einen Button mit einer Funktion, wenn die "Koordinaten" und Eigenschaften des Buttons schon festgelegt sind? im einfachen Fall habe ich eine Klasse button1 der die Funktion:

Code: Alles auswählen

def f():
   print "Hallo"
aufrufen soll. Wie gehe ich da vor? Kann mir jemand gute Tutorials empfehlen, bei denen nicht ein Umfangreiches wissen über Qt erworben wird? ich brauche ja kein detailliertes Verständnis für die Klassen, weil es mir in erster Linie "nur" um die logische Verknüpfung der Widgets unter einander und mit Funktionen geht. Die Denkarbeit für die "Optik" der Widgets nimmt mir ja schon der Qt Designer ab.
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Hier ist ein Beispiel:

Code: Alles auswählen

'''
run_form_button_label1.py

a simple loader for .ui XML files generated with PySide Designer
the Designer's XML file was saved as "form_button_label1.ui"

it contains a QWidget form with a QPushButton and a QLabel

The QPushButton and QLabel are not connected using the Designer
the connection is done by this programming code

PySide is the official LGPL-licensed version of PyQT
download PySide (LGPL-licensed version of PyQT) from:
http://qt-project.org/wiki/PySide
'''

from PySide.QtCore import *
from PySide.QtGui import *
from PySide.QtUiTools import QUiLoader

def on_click():
    '''the button has been clicked, change the label text'''
    label.setText("hello")

# create the application
app = QApplication([])

# create the ui loader
loader = QUiLoader()
# and load the form's ui file created by Designer
widget = loader.load("form_button_label1.ui")
widget.show()

# create the pushbutton and label objects
# (for correct names check the .ui file)
button = widget.findChild(QPushButton, 'pushButton')
label = widget.findChild(QLabel, 'label')

# if the button is clicked, change the label text
# uses newer connect style (4.7)
button.clicked.connect(on_click)

# execute the application
app.exec_()
Atomkraftwerkaktienbesitzer
Ene Uran
User
Beiträge: 125
Registriert: Sonntag 17. September 2006, 20:14
Wohnort: Hollywood

Hier ist die XML vom Designer (form_button_label1.ui):

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>Form</class>
 <widget class="QWidget" name="Form">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>84</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Form</string>
  </property>
  <widget class="QPushButton" name="pushButton">
   <property name="geometry">
    <rect>
     <x>10</x>
     <y>10</y>
     <width>75</width>
     <height>23</height>
    </rect>
   </property>
   <property name="text">
    <string>PushButton</string>
   </property>
  </widget>
  <widget class="QLabel" name="label">
   <property name="geometry">
    <rect>
     <x>20</x>
     <y>50</y>
     <width>46</width>
     <height>13</height>
    </rect>
   </property>
   <property name="text">
    <string>TextLabel</string>
   </property>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

Atomkraftwerkaktienbesitzer
möppi
User
Beiträge: 39
Registriert: Samstag 29. März 2014, 09:18

danke Ene Uran,
ich werde es später ausprobieren.
Antworten