pyqt5 Handledning
Komma igång med pyqt5
Sök…
Anmärkningar
Det här avsnittet ger en översikt över vad pyqt5 är, och varför en utvecklare kanske vill använda den.
Det bör också nämna alla stora ämnen inom pyqt5 och länka till relaterade ämnen. Eftersom dokumentationen för pyqt5 är ny, kan du behöva skapa initialversioner av relaterade ämnen.
Installation eller installation
- Installera Anaconda (PyQt5 är inbyggt), särskilt för Windows-användare.
- Integrera QtDesigner och QtUIConvert i PyCharm (externa verktyg)
- Skriv demo
- nytt windows.ui av externt verktyg (QtDesigner)
- konvertera till windows.py med externt verktyg (PyUIConv)
- demo
import sys from PyQt5.QtWidgets import QApplication,QMainWindow from window import Ui_MainWindow if __name__ == '__main__': app = QApplication(sys.argv) w = QMainWindow() ui = Ui_MainWindow() ui.setupUi(w) w.show() sys.exit(app.exec_())
Hej världsexempel
Det här exemplet skapar ett enkelt fönster med en knapp och en radredigering i en layout. Det visar också hur man ansluter en signal till en plats, så att genom att klicka på knappen läggs lite text till radredigeringen.
import sys
from PyQt5.QtWidgets import QApplication, QWidget
if __name__ == '__main__':
app = QApplication(sys.argv)
w = QWidget()
w.resize(250, 150)
w.move(300, 300)
w.setWindowTitle('Hello World')
w.show()
sys.exit(app.exec_())
Analys
app = QtWidgets.QApplication(sys.argv)
Varje PyQt5-program måste skapa ett applikationsobjekt. Parametern sys.argv är en lista med argument från en kommandorad. Python-skript kan köras från skalet.
w = QWidget()
QWidget
är basklassen för alla användargränssnittsobjekt i PyQt5. Vi tillhandahåller standardkonstruktören för QWidget
. Standardkonstruktören har ingen förälder. En widget utan förälder kallas ett fönster.
w.resize(250, 150)
Metoden Resize resize()
ändrar storleken på widgeten. Den är 250px bred och 150px hög.
w.move(300, 300)
Metoden för att move()
flyttar widgeten till en position på skärmen vid x = 300, y = 300 koordinater.
w.setWindowTitle('Hello World')
Här ställer vi in titeln för vårt fönster. Titeln visas i titelraden.
w.show()
Metoden show()
visar widgeten på skärmen. En widget skapas först i minnet och visas senare på skärmen.
sys.exit(app.exec_())
Slutligen går vi in i huvudslingan i applikationen. Händelseshanteringen börjar från denna punkt. Huvudslingan tar emot händelser från fönstersystemet och skickar dem till applikationswidgets. Huvudslingan avslutas om vi kallar metoden exit()
eller huvud widgeten förstörs. sys.exit()
garanterar en ren utgång. Miljön informeras om hur ansökan avslutades.
exec_()
har en understruk. Det beror på att exec är ett Python-nyckelord. Och därmed användes exec_()
istället.
Lägga till en applikationsikon
import sys
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Icon')
self.setWindowIcon(QIcon('web.png'))
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Analys
Funktionsargument i Python
I Python kan användardefinierade funktioner ta fyra olika typer av argument.
- Standardargument:
Funktionsdefinition
def defaultArg( name, msg = "Hello!"):
Funktionssamtal
defaultArg( name)
- Obligatoriska argument:
Funktionsdefinition
def requiredArg (str,num):
Funktionssamtal:
requiredArg ("Hello",12)
- Sökordsargument:
Funktionsdefinition
def keywordArg( name, role ):
Funktionssamtal
keywordArg( name = "Tom", role = "Manager")
eller
keywordArg( role = "Manager", name = "Tom")
- Variabelt antal argument:
Funktionsdefinition
def varlengthArgs(*varargs):
Funktionssamtal
varlengthArgs(30,40,50,60)
class Example(QWidget):
def __init__(self):
super().__init__()
...
Tre viktiga saker i objektorienterad programmering är klasser, data och metoder. Här skapar vi en ny klass som heter Example
. Klassen Example
ärver från klassen QWidget
. Det betyder att vi kallar två konstruktörer: den första för klassen Example
och den andra för den ärvda klassen. Metoden super()
returnerar moderobjektet i klassen Example
och vi kallar dess konstruktör. Den self
variabel avser själva objektet.
Varför har vi använt __init__
?
Kolla in det här:
class A(object):
def __init__(self):
self.lst = []
class B(object):
lst = []
och försök nu:
>>> x = B()
>>> y = B()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1, 2]
>>> x.lst is y.lst
True
och detta:
>>> x = A()
>>> y = A()
>>> x.lst.append(1)
>>> y.lst.append(2)
>>> x.lst
[1]
>>> x.lst is y.lst
False
Betyder det att x i klass B är etablerat före instans?
Ja, det är ett klassattribut (det delas mellan instanser). I klass A är det ett instansattribut.
self.initUI()
Skapandet av GUI delegeras till initUI()
.
self.setGeometry(300, 300, 300, 220)
self.setWindowTitle('Icon')
self.setWindowIcon(QIcon('web.png'))
Alla tre metoderna ärvdes från QWidget
klassen. setGeometry()
gör två saker: den lokaliserar fönstret på skärmen och ställer in storlek. De två första parametrarna är fönstren x och y. Den tredje är bredden och den fjärde är fönstrets höjd. I själva verket kombinerar den resize()
och move()
-metoderna i en metod. Den sista metoden anger applikationsikonen. För att göra detta har vi skapat ett QIcon
objekt. QIcon
får sökvägen till vår ikon som ska visas.
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Applikationen och exempelobjekt skapas. Huvudslingan startas.
Visar ett verktygstips
import sys
from PyQt5.QtWidgets import (QWidget, QToolTip,
QPushButton, QApplication)
from PyQt5.QtGui import QFont
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
QToolTip.setFont(QFont('SansSerif', 10))
self.setToolTip('This is a <b>QWidget</b> widget')
btn = QPushButton('Button', self)
btn.setToolTip('This is a <b>QPushButton</b> widget')
btn.resize(btn.sizeHint())
btn.move(50, 50)
self.setGeometry(300, 300, 300, 200)
self.setWindowTitle('Tooltips')
self.show()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
Analys
QToolTip.setFont(QFont('SansSerif', 10))
Denna statiska metod anger ett teckensnitt som används för att återge verktygstips. Vi använder ett 10px SansSerif-teckensnitt.
self.setToolTip('This is a <b>QWidget</b> widget')
För att skapa ett verktygstips kallar setTooltip()
metoden setTooltip()
. Vi kan använda formatering av rik text.
btn = QPushButton('Button', self)
btn.setToolTip('This is a <b>QPushButton</b> widget')
Vi skapar en tryckknapp-widget och ställer in ett verktygstips för den.
btn.resize(btn.sizeHint())
btn.move(50, 50)
Ändra storlek på knappen och flyttas i fönstret. sizeHint()
ger en rekommenderad storlek för knappen.
Packa ditt projekt i excutable / installer
cx_Freeze - ett verktyg kan paketera ditt projekt till excutable / installer
- efter att ha installerat det med pip, för att paketera
demo.py
, behöver visetup.py
nedan.
import sys
from cx_Freeze import setup, Executable
# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {
"excludes": ["tkinter"],
"include_files":[('./platforms','./platforms')] # need qwindows.dll for qt5 application
}
# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup( name = "demo",
version = "0.1",
description = "demo",
options = {"build_exe": build_exe_options},
executables = [Executable("demo.py", base=base)])
- bygg sedan
python .\setup.py build
- sedan dist
python .\setup.py bdist_msi