4 ? w& I" E) d( T6 _. ?/ `; R其中: 4 N9 D0 b# l8 r" H 3 m3 b5 ^4 ?: q8 J' q& N, i3 o# ]& }Qapplication():每个GUI都必须包含一个Qapplication,argv表示获取命令行参数,如果不用获取,则可以使用[]代替。 & Y; G3 T. j3 ?/ j) b1 Q 7 a8 A' E; d+ ]/ r5 q3 X7 D: EQMainWindow():类似一个容器(窗口)用来包含按钮、文本、输入框等widgets。arg标识可以获取命令行执行时的参数。 " X5 K5 w. e# y0 _% H) w4 [2 c# E6 H& c% E w6 ^
SetGeometry是用来定义 QMainWindow() 窗口的尺寸, 语法:setGeometry(x, y, width, height ),其中x,y为屏幕上的坐标点。& \2 ^, e' v& o" O* y2 S
3 ^$ q5 ?1 G! m, k9 u' Jshow():用来显示窗口 c2 U) v/ o" f 4 R7 q& M4 ]; U B' \) Kexit(app.exec_()):设置窗口一直运行指导使用关闭按钮进行关闭: g1 h" s/ t% |! B/ |, b0 m
" r! e# F& ~+ Z. O
PyQt5支持的常见Widgets有: 9 K* z& f( a. L' N * q# V! s3 S8 E+ K1 n 7 h+ b. {) f! P2 r, O: d$ b: N" G0 S7 z
从上到下,从左到右依次为:Qlabel、QcomboBox、QcheckBox、QradioButton、QpushButton、QtableWidget、QlineEdit、Qslider、QProgressBar - D/ h" N0 d7 V 7 @% l) A6 O) \8 |对于使用Pyqt5设置文本内容,我们使用Qlabel:8 |, U! |" E" H* T# U7 E
/ R7 s) y* _! u
import sys 6 G, g3 S5 i$ T G7 o+ w7 n( W7 v6 b5 P4 @( J: y0 Q
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel - Y# X5 j4 Z" c4 ? % p0 L# S; k1 X; z4 _app = QApplication(sys.argv) ( k+ x" F* v8 B1 x; u& a # c9 Y/ e: e( g( mwin = QMainWindow()1 E7 C' {) j0 ^) D; y
9 u# d& w5 X* e& n( y* n
win.setGeometry(400, 400, 400, 300)6 _* q8 ?5 \' w8 Q
& k: a( ?3 u( Qwin.setWindowTitle("Pyqt5 Tutorial"); c, I% g! v8 U: ^; U0 M7 }$ N6 d
4 A9 X+ d2 o, M- S
\# Label Text * N. O- P) G; C9 e- R4 b) Z 1 g7 J' x' g- W! _5 llabel = QLabel(win) 4 M7 A+ M" B4 J3 n ?1 A t8 {' F% j/ N' j' Ylabel.resize(200, 100) 2 t# `5 R! ?: @+ H " x1 q' n. d, o$ C: W1 ^7 B" Plabel.setText("Hi this is Pyqt5")* t2 ]$ X- B- }& Q. p9 D: R: f
) f: o7 z2 i% o3 [' klabel.move(100, 100) ( Y5 b' ?/ c1 `* h. E, c7 F+ g8 B* C5 ]! a
win.show() # E( X0 M' u. T: h! s2 P6 ~7 l; o1 w
sys.exit(app.exec_())' d) S& j' r9 `& [/ \
7 {2 X# V; o8 f4 B A & E4 m; {, q0 G; x( m B1 |# Z/ ~# F$ s! p
按钮与事件: " v4 i8 `0 y. _% P1 v7 }6 r; M* i7 q1 F1 l& T3 v
import sys. E& O& U4 x; i* {7 `% j
! J2 m1 Q* |9 Q% | O
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton- I, ?/ h7 i4 e7 {$ T+ Z; l
5 t& C& p! m }2 N2 N0 }: W6 u3 g3 ~
def click(): / A# C1 s8 M4 {/ z8 r . w# V8 [- {. N print("Hy Button is clicked!")( G( ~. F2 f1 d; \
. A3 B8 t, ^" N8 h; _" lapp = QApplication(sys.argv) - j \$ ?* c# K% J$ f , `/ z: b# y6 S" o0 O, V" Twin = QMainWindow()% o+ s( _- c4 O8 q, s+ F" A
: l# }0 ]5 d4 ]& \; c a
win.setGeometry(400, 400, 400, 300)9 ?% u7 Z+ I! @
. j0 a/ X0 {+ Z5 {
win.setWindowTitle("Pyqt5 Tutorial") 7 _( `: t) }) j1 S; l3 W8 H- x/ d5 ]4 E$ {5 B
\# Button , j) A, [* y0 M* H d: G# n/ O! c/ N& V; |! N) l# y, i" P f- Z8 I
button = QPushButton(win) 2 @1 b8 L! E. ^8 E: v2 [# M% J, F" N/ i# K, k q& z1 ~6 ]. W
button.resize(200, 100) / K7 y+ S1 h: r3 q/ s" h& ~; f! N& y4 N# }
button.setText("Hi! Click Me")6 U7 A5 b6 v* g8 o- \
3 x% m' ?% v- L9 A4 _
button.move(100, 100) " X) ^5 B7 c C) d4 U- G ( c# L+ B+ s+ g5 r! v( r! x: D G% s) Lbutton.clicked.connect(click) ) H. v+ A: m% o; q4 I( A 7 y* C& _* ^& d$ V% e$ \win.show()+ M# b& D- U! d2 B
* N* |. e) K! a, V) m, b% ]
sys.exit(app.exec_()) + Z1 c: j& l+ o, T4 H+ ~ S4 C2 i0 w: q 0 V' C6 f3 B+ i# M- K2 O' A2 g; O5 h( S( }, y/ S) K# @, B2 U/ G
- V$ ]4 q7 i' ?- ] Ybutton.clicked.connect() 在按钮点击后执行特定的事件。 * j$ A j- P6 c' n7 O 0 _7 \; E: a* A! ^. w! SPyQt5实战5 Z) Z& L( v0 H) D
o7 z- L& P% p4 U2 L实战项目:简易的天气查询软件5 I6 g5 s# s& f9 f& u" h9 C7 u9 M
( ~7 C. d& t9 D5 Q1、使用Qt Designer设计一个界面& U, Y- N3 |! n T+ J+ G g3 ^, [/ |
+ S# r" A( T% F. ]% F- d8 R) ~# M( a% G1 X! J2 P7 R
8 _/ p8 N$ J7 Z+ d; Y7 E/ }$ K3 \- D
用到的控件有Button, GroupBox, Label,ComboBox,TextEdit,同时定义了两个按钮queryBtn及clearBtn,分别用来查询及清空天气数据。我们需要绑定槽函数,方法如下: ! W. U4 w; B* b: S9 _ ; Y( L; U9 {3 Y3 _在Qt Designer右下角选择 信号/槽编辑器,点击+号新增 6 y! x# P3 [* g. l: S8 ~1 b* ~! {( {3 W. B9 I7 Z
分别选择queryBtn及clearBtn,选择信号 clicked(), 接收者 Dialog 及槽 accept(),(槽函数这里不知道如何定义,后期在代码里再进行修改) & i% X0 u! M1 V' ^8 y 2 M& p/ @: g9 q& \0 h, N以上完成后保存为Weather.ui文件。 & F0 J% v& g2 X) y # z1 w1 C) K5 `& L- m: m2、转换.ui文件为.py文件 7 u% @% }" ?7 z {( `7 S . t. u1 N# m' T. P* c5 kPyQt5支持直接使用.ui文件: ' X* I. k, [; e6 v8 C* i% m5 M$ Z; @( s7 l# K( |% ^
import sys' _$ t( g t l ^0 K( ~0 C
; W- {& j0 t- Sfrom PyQt5 import QtWidgets, uic % z/ E+ A. P+ f F ) F# L$ v) b+ w8 Z0 X$ Capp = QtWidgets.QApplication(sys.argv) 0 G V9 e8 s9 b5 w+ I/ r( W# @3 A+ z
window = uic.loadUi("mainwindow.ui") ) r. Q: Z& l0 L" a' ^+ t0 L% Y ( P, t* p; n2 a8 Iwindow.show() ! B* o- R$ H r" {) [' I; U- o; b' H% l. |# m5 C. h0 T
app.exec() - r* [8 A# ~; O3 ]" J1 h( F但是为了更好的自定义及修改上面的槽函数,可以使用External Tools – PyUIC,即可生成Weather.py,实际运行命令如下:" b$ T. b! ?! _% F
% L9 s# ]3 o* ]' l3 b! d
D:\Program Files\Python36\python.exe -m PyQt5.uic.pyuic Weather.ui -o Weather.py ' n }$ n) L1 _ s4 b其中,我们需要把两个按钮绑定的槽函数:$ r4 ?) W# |. K2 Y
0 J! v6 m4 N0 P( E* w
\# self.queryBtn.clicked.connect(Dialog.accept) 8 x+ Y2 {% n C# g9 v1 Q * Z* h7 c8 [/ z; N& G" h\# self.clearBtn.clicked.connect(Dialog.accept) {& y5 X' H3 ?/ |2 q
' [, V+ U2 {& ], `! T" F! M\# 修改为: ' v& \9 Q- H$ ]1 g+ h 2 b0 m$ o, G5 ~self.queryBtn.clicked.connect(Dialog.queryWeather) ; y; H+ E! x% r/ @5 i; I. c( U" f6 ?; f
self.clearBtn.clicked.connect(Dialog.clearText) & L7 P7 ~3 h5 k" ~- O4 e+ I; x; K0 Q最终的Weather.py内容如下:5 ]- Q/ X; J/ M
2 x$ W( t5 e5 ]9 ]7 [
\# -*- coding: utf-8 -*- + N' W! G2 ]3 _0 Q2 u: s5 k o& e8 z3 Z% @+ u) F3 Y8 x2 G' [/ h
\# Form implementation generated from reading ui file 'Weather.ui' ! m" \* `: f, x3 W1 S" U6 Y ; i) F* y9 H4 O8 F6 w0 o" J\# ' x- ^" z3 s% A% k; ?5 m& o6 V3 T 8 U9 p& }& c9 S a, \+ I* ?2 E: Z# ^\# Created by: PyQt5 UI code generator 5.15.4 ! l4 f* U" ?# B. v: L* y. ^) x' W' t , F0 [: ]% c4 y- d: O$ y/ z e\#, r; v/ p! b: x7 I
$ Q5 E' K. P/ G\# WARNING: Any manual changes made to this file will be lost when pyuic5 is6 o4 ^0 F$ G0 Q+ g: g/ g- h" M# m
2 v8 a3 {6 Z1 c: l6 O! V$ n0 @/ N
\# run again. Do not edit this file unless you know what you are doing. . q! R2 ^/ Q/ o( V8 ~ 1 v, z( r6 V, D) Z( I& d' V7 j* gfrom PyQt5 import QtCore, QtGui, QtWidgets3 t; D8 k6 f) s2 J; `# S
) a- k- w3 V- h$ d2 s/ Y
class Ui_Dialog(object):. i/ H1 `+ a( }8 j
) F; S* t% l% s- y! Z0 g( ]2 w7 B0 ] def setupUi(self, Dialog): , j6 t" L2 D) Q2 e3 Z + |4 K h) Q. [% m Dialog.setObjectName("Dialog") & c& o9 c) |; j% f* M! P, D, ^5 y* b; y# B
Dialog.resize(600, 600)' i2 G* C2 X) L ?
" {6 N7 J8 H5 O3 u- {2 t2 M0 | self.groupBox = QtWidgets.QGroupBox(Dialog)9 U2 d R* A( r
4 q; ?& q: H3 ]. `
self.groupBox.setGeometry(QtCore.QRect(30, 20, 551, 511)) ; p; G8 B. }. \/ ^+ T0 P6 t " O+ U- Y6 F2 h9 l# `& e self.groupBox.setObjectName("groupBox")7 \( w2 h9 Z9 Q a1 |% [+ u, i