PySide Beginner Examples/de: Difference between revisions
(Created page with "Für GUI Arbeiten wie PySide wird der Begriff "Widget" am häufigsten verwendet, um die sichtbaren Elemente der GUI zu bezeichnen - Fenster, Dialoge und Ein-/Ausgabefunktionen...") |
No edit summary |
||
(18 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
<languages/> |
<languages/> |
||
⚫ | |||
<span id="Introduction"></span> |
|||
⚫ | |||
Der Zweck dieser Seite ist es, Beispiele auf Anfängerniveau für die [[PySide/de|PySide]] GUI Verwalter (es gibt begleitende Seiten [[PySide_Intermediate_Examples/de|Zwischen PySide Beispiele]] und [[PySide_Advanced_Examples/de|Fortgeschrittene PySide Beispiele]]). |
Der Zweck dieser Seite ist es, Beispiele auf Anfängerniveau für die [[PySide/de|PySide]] GUI Verwalter (es gibt begleitende Seiten [[PySide_Intermediate_Examples/de|Zwischen PySide Beispiele]] und [[PySide_Advanced_Examples/de|Fortgeschrittene PySide Beispiele]]). |
||
Line 10: | Line 12: | ||
Für GUI Arbeiten wie PySide wird der Begriff "Widget" am häufigsten verwendet, um die sichtbaren Elemente der GUI zu bezeichnen - Fenster, Dialoge und Ein-/Ausgabefunktionen. Alle sichtbaren Elemente von PySide werden Widgets genannt, und für diejenigen, die daran interessiert sind, sie stammen alle von einer gemeinsamen Elternklasse ab, nämlich QWidget. Zusätzlich zu den sichtbaren Elementen bietet PySide auch Widgets für Netzwerk-, XML-, Multimedia- und Datenbankintegration. |
Für GUI Arbeiten wie PySide wird der Begriff "Widget" am häufigsten verwendet, um die sichtbaren Elemente der GUI zu bezeichnen - Fenster, Dialoge und Ein-/Ausgabefunktionen. Alle sichtbaren Elemente von PySide werden Widgets genannt, und für diejenigen, die daran interessiert sind, sie stammen alle von einer gemeinsamen Elternklasse ab, nämlich QWidget. Zusätzlich zu den sichtbaren Elementen bietet PySide auch Widgets für Netzwerk-, XML-, Multimedia- und Datenbankintegration. |
||
Ein Widget, das nicht in ein übergeordnetes Widget eingebettet ist, wird als Fenster bezeichnet, und normalerweise haben Fenster einen Rahmen und eine Titelleiste. Die gebräuchlichsten Fenstertypen sind das "Hauptfenster" (aus der Klasse QMainWindow) und die verschiedenen Unterklassen des Dialogs (aus der Klasse QDialog). Ein großer Unterschied besteht darin, dass QDialog modal ist (d.h. der Benutzer kann nichts außerhalb des Dialogfensters tun, während es geöffnet ist) und das QMainWindow nicht-modal ist, was es dem Benutzer erlaubt, parallel mit anderen Fenstern zu interagieren. |
|||
Dieser Führer ist eine Abkürzungsliste, um ein PySide Programm schnell unter FreeCAD zum Laufen zu bringen. Es ist nicht dazu gedacht, Python oder PySide zu lehren. Einige Websites, die dies tun, sind es: |
|||
This guide is a shortcut list for getting a PySide program working quickly under FreeCAD, it isn't intended to teach Python or PySide. Some sites that do that are: |
|||
* [http://zetcode.com/gui/pysidetutorial/ PySide |
* [http://zetcode.com/gui/pysidetutorial/ PySide Tutorium] auf zetcode.com |
||
* [http://www.pythoncentral.io/series/python-pyside-pyqt-tutorial/ PySide/PyQt |
* [http://www.pythoncentral.io/series/python-pyside-pyqt-tutorial/ PySide/PyQt Ttutorium] auf PythonCentral.io |
||
* [http://srinikom.github.io/ PySide 1.0.7 |
* [http://srinikom.github.io/ PySide 1.0.7 Referenz] auf Srinikom.github.io (beachte, dass dies eine Referenz und kein Tutorium ist) |
||
<span id="Import_statement"></span> |
|||
==Import Anweisung== |
==Import Anweisung== |
||
PySide |
PySide wird standardmäßig nicht mit Python geladen, es muss vor der Verwendung angefordert werden. Der folgende Befehl: |
||
{{Code|code= |
{{Code|code= |
||
from PySide import QtCore |
from PySide import QtCore |
||
from PySide import QtGui |
from PySide import QtGui |
||
}} |
}} |
||
causes the 2 parts of PySide to be loaded - QtGui holds classes for managing the Graphic User Interface while QtCore contains classes that do not directly relate to management of the GUI (e.g. timers and geometry). Although it is possible to only import the one that is needed, generally they are both needed and both imported. |
|||
bewirkt, dass die 2 Teile von PySide geladen werden - QtGui enthält Klassen zur Verwaltung der grafischen Benutzeroberfläche, während QtCore Klassen enthält, die sich nicht direkt auf die Verwaltung der GUI beziehen (z.B. Timer und Geometrie). Obwohl es möglich ist, nur das zu importieren, was benötigt wird, werden im Allgemeinen beide benötigt und beide importiert. |
|||
The import statements are not repeated in the snippets below; it is assumed that it is done at the beginning in each case. |
|||
Die Importangaben werden in den folgenden Schnipseln nicht wiederholt; es wird davon ausgegangen, dass dies jeweils am Anfang geschieht. |
|||
<span id="Simplest_Example"></span> |
|||
==Einfachstes Beispiel== |
==Einfachstes Beispiel== |
||
Die einfachste Interaktion mit PySide besteht darin, dem Benutzer eine Nachricht zu präsentieren, die er nur akzeptieren kann: |
Die einfachste Interaktion mit PySide besteht darin, dem Benutzer eine Nachricht zu präsentieren, die er nur akzeptieren kann: |
||
{{Code|code= |
{{Code|code= |
||
reply = QtGui.QMessageBox.information(None,"","Houston, we have a problem") |
reply = QtGui.QMessageBox.information(None,"","Houston, we have a problem") |
||
}} |
}} |
||
[[File:PySideScreenSnapshot5.jpg]] |
[[File:PySideScreenSnapshot5.jpg]] |
||
<span id="Yes_or_No_Query"></span> |
|||
==Ja oder |
==Ja oder Nein Abfrage== |
||
⚫ | |||
⚫ | |||
{{Code|code= |
{{Code|code= |
||
reply = QtGui.QMessageBox.question(None, "", "This is your chance to answer, what do you think?", |
reply = QtGui.QMessageBox.question(None, "", "This is your chance to answer, what do you think?", |
||
Line 49: | Line 59: | ||
pass |
pass |
||
}} |
}} |
||
[[File:PySideScreenSnapshot6.jpg]] |
[[File:PySideScreenSnapshot6.jpg]] |
||
<span id="Enter_Text_Query"></span> |
|||
==Enter Text Query== |
|||
==Textabfrage eingeben== |
|||
The next code snippet asks the user for a piece of text - note this can be any key on the keyboard really: |
|||
Der nächste Codeschnipsel fragt den Benutzer nach einem Stück Text - beachte, dass dies wirklich jede Taste auf der Tastatur sein kann: |
|||
{{Code|code= |
{{Code|code= |
||
reply = QtGui.QInputDialog.getText(None, "Ouija Central","Enter your thoughts for the day:") |
reply = QtGui.QInputDialog.getText(None, "Ouija Central","Enter your thoughts for the day:") |
||
Line 64: | Line 76: | ||
replyText = reply[0] # which will be "" if they clicked Cancel |
replyText = reply[0] # which will be "" if they clicked Cancel |
||
}} |
}} |
||
[[File:PySideScreenSnapshot7.jpg]] |
[[File:PySideScreenSnapshot7.jpg]] |
||
Denke daran, dass selbst wenn der Benutzer nur Ziffern eingibt, z.B. "1234", es sich um Zeichenketten handelt, die mit einem der folgenden Verfahren in eine Zahlendarstellung umgewandelt werden müssen: |
|||
Remember that even if the user enters only digits, "1234" for example, they are strings and must be converted to number representation with either of the following: |
|||
{{Code|code= |
{{Code|code= |
||
anInteger = int(userInput) # to convert to an integer from a string representation |
anInteger = int(userInput) # to convert to an integer from a string representation |
||
Line 74: | Line 86: | ||
aFloat = float(userInput) # to convert to a float from a string representation |
aFloat = float(userInput) # to convert to a float from a string representation |
||
}} |
}} |
||
==More Than 2 Buttons== |
|||
<span id="More_Than_2_Buttons"></span> |
|||
The final Beginner Level example is of how to build a dialog with an arbitrary number of buttons. This example is programmatically too complex to be invoked from a single Python statement so in some ways it should be on the next page which is PySide Medium examples. But on the other hand this is often all that is needed without getting into complex GUI definitions, so the code is placed at the end of the page of this Beginner PySide page rather than the beginning of the following Medium PySide page. |
|||
==Mehr als 2 Schaltflächen== |
|||
Das letzte Beispiel für das Anfängerniveau zeigt, wie man einen Dialog mit einer beliebigen Anzahl von Schaltflächen aufbaut. Dieses Beispiel ist programmtechnisch zu komplex, um von einer einzigen Python-Anweisung aus aufgerufen zu werden, daher sollte es in gewisser Weise auf der nächsten Seite, die [[PySide_Intermediate_Examples/de|PySide weiterführende Beispiele]] enthält, aufgeführt werden. Andererseits ist dies oft alles, was benötigt wird, ohne sich in komplexe GUI-Definitionen zu vertiefen, so dass der Code am Ende der Seite und nicht am Anfang der folgenden weiterführenden PySide-Seite platziert wird. |
|||
{{Code|code= |
{{Code|code= |
||
from PySide import QtGui, QtCore |
from PySide import QtGui, QtCore |
||
Line 128: | Line 144: | ||
def routine1(): |
def routine1(): |
||
print 'routine 1' |
print ('routine 1') |
||
form = MyButtons() |
form = MyButtons() |
||
Line 142: | Line 158: | ||
elif form.retStatus==5: |
elif form.retStatus==5: |
||
routine5() |
routine5() |
||
}} |
}} |
||
Each piece of code under test would be in a function with the name 'routine1()', 'routine2()', etc. As many buttons as you can fit on the screen may be used. Follow the patterns in the code sample and add extra buttons as needed - the Dialog box will set it's width accordingly, up to the width of the screen. |
|||
Jedes zu testende Codestück würde sich in einer Funktion mit dem Namen 'routine1()', 'routine2()' usw. befinden. Es können so viele Schaltflächen verwendet werden, wie auf den Bildschirm passen. Folge den Mustern im Codebeispiel und füge bei Bedarf zusätzliche Knöpfe hinzu - das Dialogfeld wird seine Breite entsprechend der Bildschirmbreite einstellen. |
|||
[[File:PySideScreenSnapshot8.jpg]] |
[[File:PySideScreenSnapshot8.jpg]] |
||
Es gibt eine Codezeile: |
Es gibt eine Codezeile: |
||
{{Code|code= |
{{Code|code= |
||
buttonBox = QtGui.QDialogButtonBox(QtCore.Qt.Horizontal) |
buttonBox = QtGui.QDialogButtonBox(QtCore.Qt.Horizontal) |
||
}} |
}} |
||
was dazu führt, dass die Schaltflächen in einer horizontalen Linie liegen. Um sie in eine vertikale Linie zu setzen, ändere die zu lesende Zeile des Codes: |
was dazu führt, dass die Schaltflächen in einer horizontalen Linie liegen. Um sie in eine vertikale Linie zu setzen, ändere die zu lesende Zeile des Codes: |
||
{{Code|code= |
{{Code|code= |
||
buttonBox = QtGui.QDialogButtonBox(QtCore.Qt.Vertical) |
buttonBox = QtGui.QDialogButtonBox(QtCore.Qt.Vertical) |
||
}} |
}} |
||
{{Powerdocnavi{{#translation:}}}} |
{{Powerdocnavi{{#translation:}}}} |
||
[[Category:Developer Documentation{{#translation:}}]] |
[[Category:Developer Documentation{{#translation:}}]] |
||
[[Category:Python Code{{#translation:}}]] |
[[Category:Python Code{{#translation:}}]] |
||
{{clear}} |
Latest revision as of 22:43, 22 April 2023
Einführung
Der Zweck dieser Seite ist es, Beispiele auf Anfängerniveau für die PySide GUI Verwalter (es gibt begleitende Seiten Zwischen PySide Beispiele und Fortgeschrittene PySide Beispiele).
Neulinge in der GUI Programmierung könnten über das Wort "Widget" stolpern. Seine Bedeutung außerhalb der Computerwelt wird gewöhnlich wie folgt angegeben
"eine kleine Spielerei oder mechanisches Gerät, insbesondere eines, dessen Name unbekannt oder unspezifiziert ist"
Für GUI Arbeiten wie PySide wird der Begriff "Widget" am häufigsten verwendet, um die sichtbaren Elemente der GUI zu bezeichnen - Fenster, Dialoge und Ein-/Ausgabefunktionen. Alle sichtbaren Elemente von PySide werden Widgets genannt, und für diejenigen, die daran interessiert sind, sie stammen alle von einer gemeinsamen Elternklasse ab, nämlich QWidget. Zusätzlich zu den sichtbaren Elementen bietet PySide auch Widgets für Netzwerk-, XML-, Multimedia- und Datenbankintegration.
Ein Widget, das nicht in ein übergeordnetes Widget eingebettet ist, wird als Fenster bezeichnet, und normalerweise haben Fenster einen Rahmen und eine Titelleiste. Die gebräuchlichsten Fenstertypen sind das "Hauptfenster" (aus der Klasse QMainWindow) und die verschiedenen Unterklassen des Dialogs (aus der Klasse QDialog). Ein großer Unterschied besteht darin, dass QDialog modal ist (d.h. der Benutzer kann nichts außerhalb des Dialogfensters tun, während es geöffnet ist) und das QMainWindow nicht-modal ist, was es dem Benutzer erlaubt, parallel mit anderen Fenstern zu interagieren.
Dieser Führer ist eine Abkürzungsliste, um ein PySide Programm schnell unter FreeCAD zum Laufen zu bringen. Es ist nicht dazu gedacht, Python oder PySide zu lehren. Einige Websites, die dies tun, sind es:
- PySide Tutorium auf zetcode.com
- PySide/PyQt Ttutorium auf PythonCentral.io
- PySide 1.0.7 Referenz auf Srinikom.github.io (beachte, dass dies eine Referenz und kein Tutorium ist)
Import Anweisung
PySide wird standardmäßig nicht mit Python geladen, es muss vor der Verwendung angefordert werden. Der folgende Befehl:
from PySide import QtCore
from PySide import QtGui
bewirkt, dass die 2 Teile von PySide geladen werden - QtGui enthält Klassen zur Verwaltung der grafischen Benutzeroberfläche, während QtCore Klassen enthält, die sich nicht direkt auf die Verwaltung der GUI beziehen (z.B. Timer und Geometrie). Obwohl es möglich ist, nur das zu importieren, was benötigt wird, werden im Allgemeinen beide benötigt und beide importiert.
Die Importangaben werden in den folgenden Schnipseln nicht wiederholt; es wird davon ausgegangen, dass dies jeweils am Anfang geschieht.
Einfachstes Beispiel
Die einfachste Interaktion mit PySide besteht darin, dem Benutzer eine Nachricht zu präsentieren, die er nur akzeptieren kann:
reply = QtGui.QMessageBox.information(None,"","Houston, we have a problem")
Ja oder Nein Abfrage
Die nächst einfachste Interaktion ist die Frage nach einer Ja oder Nein Antwort:
reply = QtGui.QMessageBox.question(None, "", "This is your chance to answer, what do you think?",
QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
if reply == QtGui.QMessageBox.Yes:
# this is where the code relevant to a 'Yes' answer goes
pass
if reply == QtGui.QMessageBox.No:
# this is where the code relevant to a 'No' answer goes
pass
Textabfrage eingeben
Der nächste Codeschnipsel fragt den Benutzer nach einem Stück Text - beachte, dass dies wirklich jede Taste auf der Tastatur sein kann:
reply = QtGui.QInputDialog.getText(None, "Ouija Central","Enter your thoughts for the day:")
if reply[1]:
# user clicked OK
replyText = reply[0]
else:
# user clicked Cancel
replyText = reply[0] # which will be "" if they clicked Cancel
Denke daran, dass selbst wenn der Benutzer nur Ziffern eingibt, z.B. "1234", es sich um Zeichenketten handelt, die mit einem der folgenden Verfahren in eine Zahlendarstellung umgewandelt werden müssen:
anInteger = int(userInput) # to convert to an integer from a string representation
aFloat = float(userInput) # to convert to a float from a string representation
Mehr als 2 Schaltflächen
Das letzte Beispiel für das Anfängerniveau zeigt, wie man einen Dialog mit einer beliebigen Anzahl von Schaltflächen aufbaut. Dieses Beispiel ist programmtechnisch zu komplex, um von einer einzigen Python-Anweisung aus aufgerufen zu werden, daher sollte es in gewisser Weise auf der nächsten Seite, die PySide weiterführende Beispiele enthält, aufgeführt werden. Andererseits ist dies oft alles, was benötigt wird, ohne sich in komplexe GUI-Definitionen zu vertiefen, so dass der Code am Ende der Seite und nicht am Anfang der folgenden weiterführenden PySide-Seite platziert wird.
from PySide import QtGui, QtCore
class MyButtons(QtGui.QDialog):
""""""
def __init__(self):
super(MyButtons, self).__init__()
self.initUI()
def initUI(self):
option1Button = QtGui.QPushButton("Option 1")
option1Button.clicked.connect(self.onOption1)
option2Button = QtGui.QPushButton("Option 2")
option2Button.clicked.connect(self.onOption2)
option3Button = QtGui.QPushButton("Option 3")
option3Button.clicked.connect(self.onOption3)
option4Button = QtGui.QPushButton("Option 4")
option4Button.clicked.connect(self.onOption4)
option5Button = QtGui.QPushButton("Option 5")
option5Button.clicked.connect(self.onOption5)
#
buttonBox = QtGui.QDialogButtonBox()
buttonBox = QtGui.QDialogButtonBox(QtCore.Qt.Horizontal)
buttonBox.addButton(option1Button, QtGui.QDialogButtonBox.ActionRole)
buttonBox.addButton(option2Button, QtGui.QDialogButtonBox.ActionRole)
buttonBox.addButton(option3Button, QtGui.QDialogButtonBox.ActionRole)
buttonBox.addButton(option4Button, QtGui.QDialogButtonBox.ActionRole)
buttonBox.addButton(option5Button, QtGui.QDialogButtonBox.ActionRole)
#
mainLayout = QtGui.QVBoxLayout()
mainLayout.addWidget(buttonBox)
self.setLayout(mainLayout)
# define window xLoc,yLoc,xDim,yDim
self.setGeometry( 250, 250, 0, 50)
self.setWindowTitle("Pick a Button")
self.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)
def onOption1(self):
self.retStatus = 1
self.close()
def onOption2(self):
self.retStatus = 2
self.close()
def onOption3(self):
self.retStatus = 3
self.close()
def onOption4(self):
self.retStatus = 4
self.close()
def onOption5(self):
self.retStatus = 5
self.close()
def routine1():
print ('routine 1')
form = MyButtons()
form.exec_()
if form.retStatus==1:
routine1()
elif form.retStatus==2:
routine2()
elif form.retStatus==3:
routine3()
elif form.retStatus==4:
routine4()
elif form.retStatus==5:
routine5()
Jedes zu testende Codestück würde sich in einer Funktion mit dem Namen 'routine1()', 'routine2()' usw. befinden. Es können so viele Schaltflächen verwendet werden, wie auf den Bildschirm passen. Folge den Mustern im Codebeispiel und füge bei Bedarf zusätzliche Knöpfe hinzu - das Dialogfeld wird seine Breite entsprechend der Bildschirmbreite einstellen.
Es gibt eine Codezeile:
buttonBox = QtGui.QDialogButtonBox(QtCore.Qt.Horizontal)
was dazu führt, dass die Schaltflächen in einer horizontalen Linie liegen. Um sie in eine vertikale Linie zu setzen, ändere die zu lesende Zeile des Codes:
buttonBox = QtGui.QDialogButtonBox(QtCore.Qt.Vertical)
- FreeCAD scripting: Python, Introduction to Python, Python scripting tutorial, FreeCAD Scripting Basics
- Modules: Builtin modules, Units, Quantity
- Workbenches: Workbench creation, Gui Commands, Commands, Installing more workbenches
- Meshes and Parts: Mesh Scripting, Topological data scripting, Mesh to Part, PythonOCC
- Parametric objects: Scripted objects, Viewproviders (Custom icon in tree view)
- Scenegraph: Coin (Inventor) scenegraph, Pivy
- Graphical interface: Interface creation, Interface creation completely in Python (1, 2, 3, 4, 5), PySide, PySide examples beginner, intermediate, advanced
- Macros: Macros, How to install macros
- Embedding: Embedding FreeCAD, Embedding FreeCADGui
- Other: Expressions, Code snippets, Line drawing function, FreeCAD vector math library (deprecated)
- Hubs: User hub, Power users hub, Developer hub