PyQt5
是一套绑定Qt5的应用程序框架。他在Python 2.x和3.x中都是可用的。该教程使用的是Python3.x。
Qt库是一套最有用的GUI库。
PyQt5是作为一套Python模块实现的。他已经超过620个类和6000个函数与方法。他是一个运行在所有主流操作系统上的多平台组件,包括Unix,Windows和Mac OS。
下面小编就给大家提供一些简单的pyqt5的案例,如有需要拿走不谢!!!
本文转载from:
PyQt5-Chinese-tutorial
import
sys
from
PyQt5
.
QtWidgets
import
QWidget
from
PyQt5
.
QtWidgets
import
QDesktopWidget
from
PyQt5
.
QtWidgets
import
QApplication
class
Ex
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
self
.
resize
(
250
,
150
)
self
.
center
(
)
self
.
setWindowTitle
(
'chuangkou要居中'
)
self
.
show
(
)
def
center
(
self
)
:
qr
=
self
.
frameGeometry
(
)
print
(
'qr:'
,
qr
)
cp
=
QDesktopWidget
(
)
.
availableGeometry
(
)
.
center
(
)
print
(
'cp:'
,
cp
)
qr
.
moveCenter
(
cp
)
self
.
move
(
qr
.
topLeft
(
)
)
app
=
QApplication
(
sys
.
argv
)
demo1
=
Ex
(
)
sys
.
exit
(
app
.
exec_
(
)
)
import
sys
from
PyQt5
.
QtWidgets
import
QApplication
from
PyQt5
.
QtWidgets
import
QMainWindow
class
Ex
(
QMainWindow
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
self
.
statusBar
(
)
.
showMessage
(
'准备'
)
self
.
setGeometry
(
300
,
300
,
250
,
150
)
self
.
setWindowTitle
(
'标题还是要取的'
)
self
.
show
(
)
app
=
QApplication
(
sys
.
argv
)
demo1
=
Ex
(
)
sys
.
exit
(
app
.
exec_
(
)
)
import
sys
from
PyQt5
.
QtWidgets
import
QMainWindow
from
PyQt5
.
QtWidgets
import
QApplication
from
PyQt5
.
QtWidgets
import
QAction
from
PyQt5
.
QtWidgets
import
qApp
from
PyQt5
.
QtGui
import
QIcon
class
Ex
(
QMainWindow
)
:
def
__init__
(
self
)
:
super
(
Ex
,
self
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
exitAct
=
QAction
(
QIcon
(
"exit.png"
)
,
'&Exit'
,
self
)
print
(
exitAct
)
exitAct
.
setShortcut
(
"ctrl+q"
)
exitAct
.
setStatusTip
(
'tuichu应用'
)
exitAct
.
triggered
.
connect
(
qApp
.
quit
)
self
.
statusBar
(
)
menubar
=
self
.
menuBar
(
)
fileMenu
=
menubar
.
addMenu
(
'&File'
)
fileMenu
.
addAction
(
exitAct
)
self
.
setGeometry
(
300
,
300
,
399
,
200
)
self
.
setWindowTitle
(
'决赛你电脑的'
)
self
.
show
(
)
app
=
QApplication
(
sys
.
argv
)
demo1
=
Ex
(
)
sys
.
exit
(
app
.
exec_
(
)
)
import
sys
from
PyQt5
.
QtWidgets
import
QMainWindow
,
QAction
,
QMenu
,
QApplication
class
Example
(
QMainWindow
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
menubar
=
self
.
menuBar
(
)
fileMenu
=
menubar
.
addMenu
(
'File'
)
impMenu
=
QMenu
(
'Import'
,
self
)
impAct
=
QAction
(
'Import mail'
,
self
)
impMenu
.
addAction
(
impAct
)
newAct
=
QAction
(
'New'
,
self
)
fileMenu
.
addAction
(
newAct
)
fileMenu
.
addMenu
(
impMenu
)
self
.
setGeometry
(
300
,
300
,
300
,
200
)
self
.
setWindowTitle
(
'Submenu'
)
self
.
show
(
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
import
sys
from
PyQt5
.
QtWidgets
import
QMainWindow
,
QAction
,
QApplication
class
Example
(
QMainWindow
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
self
.
statusbar
=
self
.
statusBar
(
)
self
.
statusbar
.
showMessage
(
'Ready'
)
menubar
=
self
.
menuBar
(
)
viewMenu
=
menubar
.
addMenu
(
'View'
)
viewStatAct
=
QAction
(
'View statusbar'
,
self
,
checkable
=
True
)
viewStatAct
.
setStatusTip
(
'View statusbar'
)
viewStatAct
.
setChecked
(
True
)
viewStatAct
.
triggered
.
connect
(
self
.
toggleMenu
)
viewMenu
.
addAction
(
viewStatAct
)
self
.
setGeometry
(
300
,
300
,
300
,
200
)
self
.
setWindowTitle
(
'Check menu'
)
self
.
show
(
)
def
toggleMenu
(
self
,
state
)
:
if
state
:
self
.
statusbar
.
show
(
)
else
:
self
.
statusbar
.
hide
(
)
app
=
QApplication
(
sys
.
argv
)
demo1
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
import
sys
from
PyQt5
.
QtWidgets
import
QMainWindow
,
qApp
,
QMenu
,
QApplication
class
Example
(
QMainWindow
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
self
.
setGeometry
(
300
,
300
,
300
,
200
)
self
.
setWindowTitle
(
'Context menu'
)
self
.
show
(
)
def
contextMenuEvent
(
self
,
event
)
:
cmenu
=
QMenu
(
self
)
newAct
=
cmenu
.
addAction
(
"New"
)
print
(
newAct
)
opnAct
=
cmenu
.
addAction
(
"Open"
)
print
(
opnAct
)
quitAct
=
cmenu
.
addAction
(
"Quit"
)
action
=
cmenu
.
exec_
(
self
.
mapToGlobal
(
event
.
pos
(
)
)
)
if
action
==
quitAct
:
qApp
.
quit
(
)
elif
action
==
opnAct
:
print
(
'打开就打开'
)
elif
action
==
newAct
:
print
(
'新建就新建'
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
import
sys
from
PyQt5
.
QtWidgets
import
QMainWindow
,
QAction
,
qApp
,
QApplication
from
PyQt5
.
QtGui
import
QIcon
class
Example
(
QMainWindow
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
exitAct
=
QAction
(
QIcon
(
'logo.png'
)
,
'Exit'
,
self
)
exitAct
.
setShortcut
(
'Ctrl+Q'
)
exitAct
.
triggered
.
connect
(
qApp
.
quit
)
self
.
toolbar
=
self
.
addToolBar
(
'Exit'
)
self
.
toolbar
.
addAction
(
exitAct
)
self
.
setGeometry
(
300
,
300
,
300
,
200
)
self
.
setWindowTitle
(
'Toolbar'
)
self
.
show
(
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
import
sys
from
PyQt5
.
QtWidgets
import
QMainWindow
from
PyQt5
.
QtWidgets
import
QTextEdit
from
PyQt5
.
QtWidgets
import
QAction
from
PyQt5
.
QtWidgets
import
QApplication
from
PyQt5
.
QtGui
import
QIcon
class
Example
(
QMainWindow
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
textEdit
=
QTextEdit
(
)
self
.
setCentralWidget
(
textEdit
)
exitAct
=
QAction
(
QIcon
(
'logo.png'
)
,
'退退退'
,
self
)
exitAct
.
setShortcut
(
'Ctrl+Q'
)
exitAct
.
setStatusTip
(
'退出应用'
)
exitAct
.
triggered
.
connect
(
self
.
close
)
self
.
statusBar
(
)
menubar
=
self
.
menuBar
(
)
fileMenu
=
menubar
.
addMenu
(
'文件'
)
fileMenu
.
addAction
(
exitAct
)
toolbar
=
self
.
addToolBar
(
'退出'
)
toolbar
.
addAction
(
exitAct
)
self
.
setGeometry
(
300
,
300
,
350
,
250
)
self
.
setWindowTitle
(
'代码编辑工具'
)
self
.
show
(
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
import
sys
from
PyQt5
.
QtWidgets
import
QWidget
,
QLabel
,
QApplication
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
lbl1
=
QLabel
(
'Zetcode'
,
self
)
lbl1
.
move
(
15
,
10
)
lbl2
=
QLabel
(
'tutorials'
,
self
)
lbl2
.
move
(
35
,
40
)
lbl3
=
QLabel
(
'for programmers'
,
self
)
lbl3
.
move
(
55
,
70
)
self
.
setGeometry
(
300
,
300
,
250
,
150
)
self
.
setWindowTitle
(
'Absolute'
)
self
.
show
(
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
import
sys
from
PyQt5
.
QtWidgets
import
(
QWidget
,
QPushButton
,
QHBoxLayout
,
QVBoxLayout
,
QApplication
)
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
okButton
=
QPushButton
(
"OK"
)
cancelButton
=
QPushButton
(
"Cancel"
)
hbox
=
QHBoxLayout
(
)
hbox
.
addStretch
(
1
)
hbox
.
addWidget
(
okButton
)
hbox
.
addWidget
(
cancelButton
)
vbox
=
QVBoxLayout
(
)
vbox
.
addStretch
(
1
)
vbox
.
addLayout
(
hbox
)
self
.
setLayout
(
vbox
)
self
.
setGeometry
(
300
,
300
,
300
,
150
)
self
.
setWindowTitle
(
'Buttons'
)
self
.
show
(
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
import
sys
from
PyQt5
.
QtWidgets
import
(
QWidget
,
QGridLayout
,
QPushButton
,
QApplication
)
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
grid
=
QGridLayout
(
)
self
.
setLayout
(
grid
)
names
=
[
'Cls'
,
'Bck'
,
''
,
'Close'
,
'7'
,
'8'
,
'9'
,
'/'
,
'4'
,
'5'
,
'6'
,
'*'
,
'1'
,
'2'
,
'3'
,
'-'
,
'0'
,
'.'
,
'='
,
'+'
]
positions
=
[
(
i
,
j
)
for
i
in
range
(
5
)
for
j
in
range
(
4
)
]
for
position
,
name
in
zip
(
positions
,
names
)
:
if
name
==
''
:
continue
button
=
QPushButton
(
name
)
grid
.
addWidget
(
button
,
*
position
)
self
.
move
(
300
,
150
)
self
.
setWindowTitle
(
'Calculator'
)
self
.
show
(
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
import
sys
from
PyQt5
.
QtWidgets
import
(
QWidget
,
QLabel
,
QLineEdit
,
QTextEdit
,
QGridLayout
,
QApplication
)
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
title
=
QLabel
(
'Title'
)
author
=
QLabel
(
'Author'
)
review
=
QLabel
(
'Review'
)
titleEdit
=
QLineEdit
(
)
authorEdit
=
QLineEdit
(
)
reviewEdit
=
QTextEdit
(
)
grid
=
QGridLayout
(
)
grid
.
setSpacing
(
10
)
grid
.
addWidget
(
title
,
1
,
0
)
grid
.
addWidget
(
titleEdit
,
1
,
1
)
grid
.
addWidget
(
author
,
2
,
0
)
grid
.
addWidget
(
authorEdit
,
2
,
1
)
grid
.
addWidget
(
review
,
3
,
0
)
grid
.
addWidget
(
reviewEdit
,
3
,
1
,
5
,
1
)
self
.
setLayout
(
grid
)
self
.
setGeometry
(
300
,
300
,
350
,
300
)
self
.
setWindowTitle
(
'Review'
)
self
.
show
(
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
signals and slots 被其他人翻译成信号和槽机制,(⊙o⊙)…我这里还是不翻译好了。
所有的应用都是事件驱动的。事件大部分都是由用户的行为产生的,当然也有其他的事件产生方式,
比如网络的连接,窗口管理器或者定时器等。调用应用的exec_()方法时,应用会进入主循环,主循环会监听和分发事件。
在事件模型中,有三个角色:
事件源就是发生了状态改变的对象。事件是这个对象状态改变的内容。
事件目标是事件想作用的目标。事件源绑定事件处理函数,然后作用于事件目标身上。
PyQt5处理事件方面有个signal and slot机制。Signals and slots用于对象间的通讯。
事件触发的时候,发生一个signal,slot是用来被Python调用的
(相当于一个句柄?这个词也好恶心,就是相当于事件的绑定函数)slot只有在事件触发的时候才能调用。
import
sys
from
PyQt5
.
QtCore
import
Qt
from
PyQt5
.
QtWidgets
import
(
QWidget
,
QLCDNumber
,
QSlider
,
QVBoxLayout
,
QApplication
)
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
lcd
=
QLCDNumber
(
self
)
print
(
"lcd:"
,
lcd
)
sld
=
QSlider
(
Qt
.
Horizontal
,
self
)
print
(
"sld"
,
sld
)
vbox
=
QVBoxLayout
(
)
print
(
vbox
)
vbox
.
addWidget
(
lcd
)
vbox
.
addWidget
(
sld
)
self
.
setLayout
(
vbox
)
print
(
lcd
.
display
)
sld
.
valueChanged
.
connect
(
lcd
.
display
)
self
.
setGeometry
(
300
,
300
,
250
,
150
)
self
.
setWindowTitle
(
'信号和槽机制的'
)
self
.
show
(
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
import
sys
from
PyQt5
.
QtCore
import
Qt
from
PyQt5
.
QtWidgets
import
QWidget
,
QApplication
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
self
.
setGeometry
(
300
,
300
,
250
,
150
)
self
.
setWindowTitle
(
'事件的手'
)
self
.
show
(
)
def
keyPressEvent
(
self
,
e
)
:
if
e
.
key
(
)
==
Qt
.
Key_Escape
:
self
.
close
(
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
import
sys
from
PyQt5
.
QtCore
import
Qt
from
PyQt5
.
QtWidgets
import
QWidget
,
QApplication
,
QGridLayout
,
QLabel
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
grid
=
QGridLayout
(
)
grid
.
setSpacing
(
10
)
x
=
0
y
=
0
self
.
text
=
"x: {0}, y: {1}"
.
format
(
x
,
y
)
self
.
label
=
QLabel
(
self
.
text
,
self
)
grid
.
addWidget
(
self
.
label
,
0
,
0
,
Qt
.
AlignTop
)
self
.
setMouseTracking
(
True
)
self
.
setLayout
(
grid
)
self
.
setGeometry
(
300
,
300
,
350
,
200
)
self
.
setWindowTitle
(
'Event object'
)
self
.
show
(
)
def
mouseMoveEvent
(
self
,
e
)
:
x
=
e
.
x
(
)
y
=
e
.
y
(
)
text
=
"x: {0}, y: {1}"
.
format
(
x
,
y
)
self
.
label
.
setText
(
text
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
import
sys
from
PyQt5
.
QtWidgets
import
QMainWindow
,
QPushButton
,
QApplication
class
Example
(
QMainWindow
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
btn1
=
QPushButton
(
"按钮老大"
,
self
)
btn1
.
move
(
30
,
50
)
btn2
=
QPushButton
(
"按钮老二"
,
self
)
btn2
.
move
(
150
,
50
)
btn1
.
clicked
.
connect
(
self
.
buttonClicked
)
btn2
.
clicked
.
connect
(
self
.
buttonClicked
)
self
.
statusBar
(
)
self
.
setGeometry
(
300
,
300
,
290
,
150
)
self
.
setWindowTitle
(
'事件发送'
)
self
.
show
(
)
def
buttonClicked
(
self
)
:
sender
=
self
.
sender
(
)
self
.
statusBar
(
)
.
showMessage
(
sender
.
text
(
)
+
'被按那儿了'
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
import
sys
from
PyQt5
.
QtCore
import
pyqtSignal
,
QObject
from
PyQt5
.
QtWidgets
import
QMainWindow
,
QApplication
class
Communicate
(
QObject
)
:
closeApp
=
pyqtSignal
(
)
class
Example
(
QMainWindow
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
self
.
c
=
Communicate
(
)
self
.
c
.
closeApp
.
connect
(
self
.
close
)
self
.
setGeometry
(
300
,
300
,
290
,
150
)
self
.
setWindowTitle
(
'Emit signal'
)
self
.
show
(
)
def
mousePressEvent
(
self
,
event
)
:
self
.
c
.
closeApp
.
emit
(
)
if
__name__
==
'__main__'
:
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
```
```python
from
PyQt5
.
QtWidgets
import
(
QWidget
,
QPushButton
,
QLineEdit
,
QInputDialog
,
QApplication
)
import
sys
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
self
.
btn
=
QPushButton
(
'Dialog'
,
self
)
self
.
btn
.
move
(
20
,
20
)
self
.
btn
.
clicked
.
connect
(
self
.
showDialog
)
self
.
le
=
QLineEdit
(
self
)
self
.
le
.
move
(
130
,
22
)
self
.
setGeometry
(
300
,
300
,
290
,
150
)
self
.
setWindowTitle
(
'Input dialog'
)
self
.
show
(
)
def
showDialog
(
self
)
:
text
,
ok
=
QInputDialog
.
getText
(
self
,
'Input Dialog'
,
'Enter your name:'
)
if
ok
:
self
.
le
.
setText
(
str
(
text
)
)
print
(
text
+
"哈哈"
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
from
PyQt5
.
QtWidgets
import
(
QWidget
,
QPushButton
,
QFrame
,
QColorDialog
,
QApplication
)
from
PyQt5
.
QtGui
import
QColor
import
sys
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
col
=
QColor
(
0
,
0
,
0
)
self
.
btn
=
QPushButton
(
'Dialog'
,
self
)
self
.
btn
.
move
(
20
,
20
)
self
.
btn
.
clicked
.
connect
(
self
.
showDialog
)
self
.
frm
=
QFrame
(
self
)
self
.
frm
.
setStyleSheet
(
"QWidget { background-color: %s }"
%
col
.
name
(
)
)
self
.
frm
.
setGeometry
(
130
,
22
,
100
,
100
)
self
.
setGeometry
(
300
,
300
,
250
,
180
)
self
.
setWindowTitle
(
'Color dialog'
)
self
.
show
(
)
def
showDialog
(
self
)
:
col
=
QColorDialog
.
getColor
(
)
if
col
.
isValid
(
)
:
self
.
frm
.
setStyleSheet
(
"QWidget { background-color: %s }"
%
col
.
name
(
)
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
加油,都看到一半了你!!!
┌─┐ ┌─┐ + + ┌──┘ ┴───────┘ ┴──┐++ │ │ │ ─── │++ + + + ███████───███████ │+ │ │+ │ ─┴─ │ │ │ └───┐ ┌───┘ │ │ │ │ + + │ │ │ └──────────────┐ │ │ │ ├─┐ │ ┌─┘ │ │ └─┐ ┐ ┌───────┬──┐ ┌──┘ + + + + │ ─┤ ─┤ │ ─┤ ─┤ └──┴──┘ └──┴──┘ + + + + 神兽保佑
代码无BUG!
from
PyQt5
.
QtWidgets
import
(
QWidget
,
QVBoxLayout
,
QPushButton
,
QSizePolicy
,
QLabel
,
QFontDialog
,
QApplication
)
import
sys
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
vbox
=
QVBoxLayout
(
)
btn
=
QPushButton
(
'来来来'
,
self
)
btn
.
setSizePolicy
(
QSizePolicy
.
Fixed
,
QSizePolicy
.
Fixed
)
btn
.
move
(
20
,
20
)
vbox
.
addWidget
(
btn
)
btn
.
clicked
.
connect
(
self
.
showDialog
)
self
.
lbl
=
QLabel
(
'Knowledge only matters'
,
self
)
self
.
lbl
.
move
(
130
,
20
)
vbox
.
addWidget
(
self
.
lbl
)
self
.
setLayout
(
vbox
)
self
.
setGeometry
(
300
,
300
,
250
,
180
)
self
.
setWindowTitle
(
'字体目录'
)
self
.
show
(
)
def
showDialog
(
self
)
:
font
,
ok
=
QFontDialog
.
getFont
(
)
if
ok
:
self
.
lbl
.
setFont
(
font
)
print
(
'选择的字体是'
,
end
=
""
)
print
(
font
)
print
(
type
(
font
)
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
from
PyQt5
.
QtWidgets
import
(
QMainWindow
,
QTextEdit
,
QAction
,
QFileDialog
,
QApplication
)
from
PyQt5
.
QtGui
import
QIcon
import
sys
class
Example
(
QMainWindow
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
self
.
textEdit
=
QTextEdit
(
)
self
.
setCentralWidget
(
self
.
textEdit
)
self
.
statusBar
(
)
openFile
=
QAction
(
QIcon
(
'images/open.png'
)
,
'Open'
,
self
)
openFile
.
setShortcut
(
'Ctrl+O'
)
openFile
.
setStatusTip
(
'打开一个新的文件'
)
openFile
.
triggered
.
connect
(
self
.
showDialog
)
menubar
=
self
.
menuBar
(
)
fileMenu
=
menubar
.
addMenu
(
'&文件'
)
fileMenu
.
addAction
(
openFile
)
self
.
setGeometry
(
300
,
300
,
350
,
300
)
self
.
setWindowTitle
(
'File dialog'
)
self
.
show
(
)
def
showDialog
(
self
)
:
fname
=
QFileDialog
.
getOpenFileName
(
self
,
'Open file'
,
'/home'
)
if
fname
[
0
]
:
f
=
open
(
fname
[
0
]
,
'r'
)
with
f
:
data
=
f
.
read
(
)
self
.
textEdit
.
setText
(
data
)
print
(
data
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
from
PyQt5
.
QtWidgets
import
QWidget
,
QCheckBox
,
QApplication
from
PyQt5
.
QtCore
import
Qt
import
sys
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
cb
=
QCheckBox
(
'改改改'
,
self
)
cb
.
move
(
20
,
20
)
cb
.
toggle
(
)
cb
.
stateChanged
.
connect
(
self
.
changeTitle
)
self
.
setGeometry
(
300
,
300
,
250
,
150
)
self
.
setWindowTitle
(
'真正的标题'
)
self
.
show
(
)
def
changeTitle
(
self
,
state
)
:
if
state
==
Qt
.
Checked
:
self
.
setWindowTitle
(
'假装有标题'
)
else
:
self
.
setWindowTitle
(
'没了'
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
from
PyQt5
.
QtWidgets
import
(
QWidget
,
QPushButton
,
QFrame
,
QApplication
)
from
PyQt5
.
QtGui
import
QColor
import
sys
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
self
.
col
=
QColor
(
0
,
0
,
0
)
redb
=
QPushButton
(
'Red'
,
self
)
redb
.
setCheckable
(
True
)
redb
.
move
(
10
,
10
)
redb
.
clicked
[
bool
]
.
connect
(
self
.
setColor
)
greenb
=
QPushButton
(
'Green'
,
self
)
greenb
.
setCheckable
(
True
)
greenb
.
move
(
10
,
60
)
greenb
.
clicked
[
bool
]
.
connect
(
self
.
setColor
)
blueb
=
QPushButton
(
'Blue'
,
self
)
blueb
.
setCheckable
(
True
)
blueb
.
move
(
10
,
110
)
blueb
.
clicked
[
bool
]
.
connect
(
self
.
setColor
)
self
.
square
=
QFrame
(
self
)
self
.
square
.
setGeometry
(
150
,
20
,
100
,
100
)
self
.
square
.
setStyleSheet
(
"QWidget { background-color: %s }"
%
self
.
col
.
name
(
)
)
self
.
setGeometry
(
300
,
300
,
280
,
170
)
self
.
setWindowTitle
(
'Toggle button'
)
self
.
show
(
)
def
setColor
(
self
,
pressed
)
:
source
=
self
.
sender
(
)
if
pressed
:
val
=
255
else
:
val
=
0
if
source
.
text
(
)
==
"Red"
:
self
.
col
.
setRed
(
val
)
elif
source
.
text
(
)
==
"Green"
:
self
.
col
.
setGreen
(
val
)
else
:
self
.
col
.
setBlue
(
val
)
self
.
square
.
setStyleSheet
(
"QFrame { background-color: %s }"
%
self
.
col
.
name
(
)
)
if
__name__
==
'__main__'
:
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
```
```python
from
PyQt5
.
QtWidgets
import
(
QWidget
,
QSlider
,
QLabel
,
QApplication
)
from
PyQt5
.
QtCore
import
Qt
from
PyQt5
.
QtGui
import
QPixmap
import
sys
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
sld
=
QSlider
(
Qt
.
Horizontal
,
self
)
sld
.
setFocusPolicy
(
Qt
.
NoFocus
)
sld
.
setGeometry
(
30
,
40
,
100
,
30
)
sld
.
valueChanged
[
int
]
.
connect
(
self
.
changeValue
)
self
.
label
=
QLabel
(
self
)
self
.
label
.
setPixmap
(
QPixmap
(
'images/logo.png'
)
)
self
.
label
.
setGeometry
(
160
,
40
,
80
,
30
)
self
.
setGeometry
(
300
,
300
,
280
,
170
)
self
.
setWindowTitle
(
's什么鸡儿玩意r'
)
self
.
show
(
)
def
changeValue
(
self
,
value
)
:
if
value
==
0
:
self
.
label
.
setPixmap
(
QPixmap
(
'images/1.png'
)
)
elif
value
>
0
and
value
<=
30
:
self
.
label
.
setPixmap
(
QPixmap
(
'images/2.png'
)
)
elif
value
>
30
and
value
<
80
:
self
.
label
.
setPixmap
(
QPixmap
(
'images/3.png'
)
)
else
:
self
.
label
.
setPixmap
(
QPixmap
(
'images/4.png'
)
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
from
PyQt5
.
QtWidgets
import
(
QWidget
,
QProgressBar
,
QPushButton
,
QApplication
)
from
PyQt5
.
QtCore
import
QBasicTimer
import
sys
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
self
.
pbar
=
QProgressBar
(
self
)
self
.
pbar
.
setGeometry
(
30
,
40
,
200
,
25
)
self
.
btn
=
QPushButton
(
'走你'
,
self
)
self
.
btn
.
move
(
40
,
80
)
self
.
btn
.
clicked
.
connect
(
self
.
doAction
)
self
.
timer
=
QBasicTimer
(
)
self
.
step
=
0
self
.
setGeometry
(
300
,
300
,
280
,
170
)
self
.
setWindowTitle
(
'进度条就比较强了'
)
self
.
show
(
)
def
timerEvent
(
self
,
e
)
:
if
self
.
step
>=
200
:
self
.
timer
.
stop
(
)
self
.
btn
.
setText
(
'完成吧'
)
return
self
.
step
=
self
.
step
+
1
self
.
pbar
.
setValue
(
self
.
step
)
def
doAction
(
self
)
:
if
self
.
timer
.
isActive
(
)
:
self
.
timer
.
stop
(
)
self
.
btn
.
setText
(
'走走走'
)
else
:
self
.
timer
.
start
(
200
,
self
)
self
.
btn
.
setText
(
'停,呗走了'
)
if
__name__
==
'__main__'
:
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
```
```python
from
PyQt5
.
QtWidgets
import
(
QWidget
,
QCalendarWidget
,
QLabel
,
QApplication
,
QVBoxLayout
)
from
PyQt5
.
QtCore
import
QDate
import
sys
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
vbox
=
QVBoxLayout
(
self
)
cal
=
QCalendarWidget
(
self
)
cal
.
setGridVisible
(
True
)
cal
.
clicked
[
QDate
]
.
connect
(
self
.
showDate
)
vbox
.
addWidget
(
cal
)
self
.
lbl
=
QLabel
(
self
)
date
=
cal
.
selectedDate
(
)
self
.
lbl
.
setText
(
date
.
toString
(
)
)
vbox
.
addWidget
(
self
.
lbl
)
self
.
setLayout
(
vbox
)
self
.
setGeometry
(
300
,
300
,
350
,
300
)
self
.
setWindowTitle
(
'看日历,认准我'
)
self
.
show
(
)
def
showDate
(
self
,
date
)
:
self
.
lbl
.
setText
(
date
.
toString
(
)
)
if
__name__
==
'__main__'
:
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
```
```python
from
PyQt5
.
QtWidgets
import
(
QWidget
,
QHBoxLayout
,
QLabel
,
QApplication
)
from
PyQt5
.
QtGui
import
QPixmap
import
sys
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
hbox
=
QHBoxLayout
(
self
)
pixmap
=
QPixmap
(
"images/09f04"
)
lbl
=
QLabel
(
self
)
lbl
.
setPixmap
(
pixmap
)
hbox
.
addWidget
(
lbl
)
self
.
setLayout
(
hbox
)
self
.
move
(
300
,
200
)
self
.
setWindowTitle
(
'Red Rock'
)
self
.
show
(
)
if
__name__
==
'__main__'
:
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
```
```python
import
sys
from
PyQt5
.
QtWidgets
import
(
QWidget
,
QLabel
,
QLineEdit
,
QApplication
)
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
self
.
lbl
=
QLabel
(
self
)
qle
=
QLineEdit
(
self
)
qle
.
move
(
60
,
100
)
self
.
lbl
.
move
(
60
,
40
)
qle
.
textChanged
[
str
]
.
connect
(
self
.
onChanged
)
self
.
setGeometry
(
300
,
300
,
280
,
170
)
self
.
setWindowTitle
(
'QLineEdit'
)
self
.
show
(
)
def
onChanged
(
self
,
text
)
:
self
.
lbl
.
setText
(
text
)
self
.
lbl
.
adjustSize
(
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
from
PyQt5
.
QtWidgets
import
(
QWidget
,
QHBoxLayout
,
QFrame
,
QSplitter
,
QStyleFactory
,
QApplication
)
from
PyQt5
.
QtCore
import
Qt
import
sys
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
hbox
=
QHBoxLayout
(
self
)
topleft
=
QFrame
(
self
)
topleft
.
setFrameShape
(
QFrame
.
StyledPanel
)
topright
=
QFrame
(
self
)
topright
.
setFrameShape
(
QFrame
.
StyledPanel
)
bottom
=
QFrame
(
self
)
bottom
.
setFrameShape
(
QFrame
.
StyledPanel
)
splitter1
=
QSplitter
(
Qt
.
Horizontal
)
splitter1
.
addWidget
(
topleft
)
splitter1
.
addWidget
(
topright
)
splitter2
=
QSplitter
(
Qt
.
Vertical
)
splitter2
.
addWidget
(
splitter1
)
splitter2
.
addWidget
(
bottom
)
hbox
.
addWidget
(
splitter2
)
self
.
setLayout
(
hbox
)
self
.
setGeometry
(
300
,
300
,
400
,
300
)
self
.
setWindowTitle
(
'QSplitter'
)
self
.
show
(
)
def
onChanged
(
self
,
text
)
:
self
.
lbl
.
setText
(
text
)
self
.
lbl
.
adjustSize
(
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
from
PyQt5
.
QtWidgets
import
(
QWidget
,
QLabel
,
QComboBox
,
QApplication
)
import
sys
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
self
.
lbl
=
QLabel
(
"Ubuntu"
,
self
)
combo
=
QComboBox
(
self
)
combo
.
addItem
(
"Ubuntu"
)
combo
.
addItem
(
"Windows"
)
combo
.
addItem
(
"centos"
)
combo
.
addItem
(
"deepin"
)
combo
.
addItem
(
"redhat"
)
combo
.
addItem
(
"debain"
)
combo
.
move
(
50
,
50
)
self
.
lbl
.
move
(
50
,
150
)
combo
.
activated
[
str
]
.
connect
(
self
.
onActivated
)
self
.
setGeometry
(
300
,
300
,
300
,
200
)
self
.
setWindowTitle
(
'下拉选框练习 '
)
self
.
show
(
)
def
onActivated
(
self
,
text
)
:
self
.
lbl
.
setText
(
text
)
self
.
lbl
.
adjustSize
(
)
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
from PyQt5.QtWidgets import (QPushButton, QWidget,
QLineEdit, QApplication)import sys
class Button(QPushButton):
def __init__(self, title, parent): super().__init__(title, parent)
self.setAcceptDrops(True)
def dragEnterEvent(self, e):
if e.mimeData().hasFormat('text/plain'): e.accept() else: e.ignore(
)
def dropEvent(self, e):
self.setText(e.mimeData().text())
class Example(QWidget):
def __init__(self): super().__init__()
self.initUI()
def initUI(self):
edit = QLineEdit('', self) edit.setDragEnabled(True) edit.move(30, 65)
button = Button("Button", self) button.move(190, 65)
self.setWindowTitle('Simple drag and drop') self.setGeometry(300, 300, 300, 150)
if __name__ == '__main__':
app = QApplication(sys.argv) ex = Example() ex.show() app.exec_()```
```python
from PyQt5.QtWidgets import QPushButton, QWidget, QApplication
from PyQt5.QtCore import Qt, QMimeData
from PyQt5.QtGui import QDrag
import sys
class Button(QPushButton):
def __init__(self, title, parent): super().__init__(title, parent)
def mouseMoveEvent(self, e):
if e.buttons() != Qt.RightButton: return
mimeData = QMimeData()
drag = QDrag(self) drag.setMimeData(mimeData) drag.setHotSpot(e.pos() - self.rect().topLeft())
dropAction = drag.exec_(Qt.MoveAction)
def mousePressEvent(self, e):
super().mousePressEvent(e)
if e.button() == Qt.LeftButton: print('按我嘎哈')
class Example(QWidget):
def __init__(self): super().__init__()
self.initUI()
def initUI(self):
self.setAcceptDrops(True)
self.button = Button('来吧!!!', self)
self.button.move(100, 65)
self.setWindowTitle('点击还能挪')
self.setGeometry(300, 300, 280, 150)
def dragEnterEvent(self, e):
e.accept()
def dropEvent(self, e):
position = e.pos() self.button.move(position)
e.setDropAction(Qt.MoveAction) e.accept()
if __name__ == '__main__':
app = QApplication(sys.argv) ex = Example() ex.show() app.exec_()"""
在GUI里,拖放是指用户点击一个虚拟的对象,拖动,然后放置到另外一个对象上面的动作。
一般情况下,需要调用很多动作和方法,创建很多变量。
拖放能让用户很直观的操作很复杂的逻辑。
一般情况下,我们可以拖放两种东西:数据和图形界面。
把一个图像从一个应用拖放到另外一个应用上的实质是操作二进制数据。
把一个表格从Firefox上拖放到另外一个位置 的实质是操作一个图形组。
import sys
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QColor, QFont
from PyQt5.QtCore import Qt
class Example(QWidget):
def __init__(self): super().__init__()
self.initUI()
def initUI(self):
self.text = "涂鸦要涂的有灵魂"
self.setGeometry(300, 300, 280, 170) self.setWindowTitle('绘画板')
self.show()
def paintEvent(self, event):
qp = QPainter() qp.begin(self) self.drawText(event, qp,168, 34, 243) qp.end()
def drawText(self, event, qp, r,g,b):
qp.setPen(QColor(r,g,b)) qp.setFont(QFont('微软雅黑', 15))
qp.drawText(event.rect(), Qt.AlignCenter, self.text)
if __name__ == '__main__':
app = QApplication(sys.argv) ex =
Example() sys.exit(app.exec_())```
```python
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter
from PyQt5.QtCore import Qt
import sys, random
class Example(QWidget):
def __init__(self): super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 300, 190) self.setWindowTitle('一大堆点点儿')
self.show()
def paintEvent(self, e):
qp = QPainter() qp.begin(self) self.drawPoints(qp) qp.end()
def drawPoints(self, qp):
qp.setPen(Qt.red) size = self.size()
for i in range(1000): x = random.randint(1, size.width()-1) y = random.randint(1, size.height()-1) qp.drawPoint(x, y)
if __name__ == '__main__':
app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())```
```python
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QColor, QBrush
import sys
class Example(QWidget):
def __init__(self): super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 350, 100) self.setWindowTitle('Colours') self.show()
def paintEvent(self, e):
qp = QPainter() qp.begin(self) self.drawRectangles(qp) qp.end()
def drawRectangles(self, qp):
col = QColor(0, 0, 0) col.setNamedColor('#d4d4d4') qp.setPen(col)
qp.setBrush(QColor(200, 0, 0)) qp.drawRect(10, 15, 90, 60)
qp.setBrush(QColor(255, 80, 0, 160)) qp.drawRect(130, 15, 90, 60)
qp.setBrush(QColor(25, 0, 90, 200)) qp.drawRect(250, 15, 90, 60)
if __name__ == '__main__':
app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())```
```python
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QPen
from PyQt5.QtCore import Qt
import sys
class Example(QWidget):
def __init__(self): super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 280, 270) self.setWindowTitle('Pen styles') self.show()
def paintEvent(self, e):
qp = QPainter() qp.begin(self) self.drawLines(qp) qp.end()
def drawLines(self, qp):
pen = QPen(Qt.black, 2, Qt.SolidLine)
qp.setPen(pen) qp.drawLine(20, 40, 250, 40)
pen.setStyle(Qt.DashLine) qp.setPen(pen) qp.drawLine(20, 80, 250, 80)
pen.setStyle(Qt.DashDotLine) qp.setPen(pen) qp.drawLine(20,
120, 250, 120)
pen.setStyle(Qt.DotLine) qp.setPen(pen) qp.drawLine(20, 160, 250, 160)
pen.setStyle(Qt.DashDotDotLine) qp.setPen(pen) qp.drawLine(20, 200, 250, 200)
pen.setStyle(Qt.CustomDashLine) pen.setDashPattern([1, 4, 5, 4]) qp.setPen(pen) qp.drawLine(20, 240, 250, 240)
if __name__ == '__main__':
app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())```
```python
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QBrush
from PyQt5.QtCore import Qt
import sys
class Example(QWidget):
def __init__(self): super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 355, 280) self.setWindowTitle('Brushes') self.show()
def paintEvent(self, e):
qp = QPainter() qp.begin(self) self.drawBrushes(qp) qp.end()
def drawBrushes(self, qp):
brush = QBrush(Qt.SolidPattern) qp.setBrush(brush) qp.drawRect(10, 15, 90, 60)
brush.setStyle(Qt.Dense1Pattern) qp.setBrush(brush) qp.drawRect(130, 15, 90, 60)
brush.setStyle(Qt.Dense2Pattern) qp.setBrush(brush) qp.drawRect(250, 15, 90, 60)
brush.setStyle(Qt.DiagCrossPattern) qp.setBrush(brush) qp.drawRect(10, 105, 90, 60)
brush.setStyle(Qt.Dense5Pattern) qp.setBrush(brush) qp.drawRect(130, 105, 90, 60)
brush.setStyle(Qt.Dense6Pattern) qp.setBrush(brush) qp.drawRect(250, 105, 90, 60)
brush.setStyle(Qt.HorPattern) qp.setBrush(brush) qp.drawRect(10, 195, 90, 60)
brush.setStyle(Qt.VerPattern) qp.setBrush(brush) qp.drawRect(130, 195, 90, 60)
brush.setStyle(Qt.BDiagPattern) qp.setBrush(brush) qp.drawRect(250, 195, 90, 60)
if __name__ == '__main__':
app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())```
```python
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtGui import QPainter, QPainterPath
from PyQt5.QtCore import Qt
import sys
class Example(QWidget):
def __init__(self): super().__init__()
self.initUI()
def initUI(self):
self.setGeometry(300, 300, 380, 250) self.setWindowTitle('绘制贝塞尔曲线')
self.show()
def paintEvent(self, e): qp = QPainter() qp.begin(self) qp.setRenderHint(QPainter.Antialiasing) self.drawBezierCurve(qp) qp.end()
def drawBezierCurve(self, qp): path = QPainterPath() path.moveTo(30, 30) path.cubicTo(30, 30, 350, 30, 200,
150)
qp.drawPath(path)
if __name__ == '__main__':
app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
from
PyQt5
.
QtWidgets
import
(
QWidget
,
QSlider
,
QApplication
,
QHBoxLayout
,
QVBoxLayout
)
from
PyQt5
.
QtCore
import
QObject
,
Qt
,
pyqtSignal
from
PyQt5
.
QtGui
import
QPainter
,
QFont
,
QColor
,
QPen
import
sys
class
Communicate
(
QObject
)
:
updateBW
=
pyqtSignal
(
int
)
class
BurningWidget
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
self
.
setMinimumSize
(
1
,
30
)
self
.
value
=
75
self
.
num
=
[
75
,
150
,
225
,
300
,
375
,
450
,
525
,
600
,
675
]
def
setValue
(
self
,
value
)
:
self
.
value
=
value
def
paintEvent
(
self
,
e
)
:
qp
=
QPainter
(
)
qp
.
begin
(
self
)
self
.
drawWidget
(
qp
)
qp
.
end
(
)
def
drawWidget
(
self
,
qp
)
:
MAX_CAPACITY
=
700
OVER_CAPACITY
=
750
font
=
QFont
(
'Serif'
,
7
,
QFont
.
Light
)
qp
.
setFont
(
font
)
size
=
self
.
size
(
)
w
=
size
.
width
(
)
h
=
size
.
height
(
)
step
=
int
(
round
(
w
/
10
)
)
till
=
int
(
(
(
w
/
OVER_CAPACITY
)
*
self
.
value
)
)
full
=
int
(
(
(
w
/
OVER_CAPACITY
)
*
MAX_CAPACITY
)
)
if
self
.
value
>=
MAX_CAPACITY
:
qp
.
setPen
(
QColor
(
255
,
255
,
255
)
)
qp
.
setBrush
(
QColor
(
255
,
255
,
184
)
)
qp
.
drawRect
(
0
,
0
,
full
,
h
)
qp
.
setPen
(
QColor
(
255
,
175
,
175
)
)
qp
.
setBrush
(
QColor
(
255
,
175
,
175
)
)
qp
.
drawRect
(
full
,
0
,
till
-
full
,
h
)
else
:
qp
.
setPen
(
QColor
(
255
,
255
,
255
)
)
qp
.
setBrush
(
QColor
(
255
,
255
,
184
)
)
qp
.
drawRect
(
0
,
0
,
till
,
h
)
pen
=
QPen
(
QColor
(
20
,
20
,
20
)
,
1
,
Qt
.
SolidLine
)
qp
.
setPen
(
pen
)
qp
.
setBrush
(
Qt
.
NoBrush
)
qp
.
drawRect
(
0
,
0
,
w
-
1
,
h
-
1
)
j
=
0
for
i
in
range
(
step
,
10
*
step
,
step
)
:
qp
.
drawLine
(
i
,
0
,
i
,
5
)
metrics
=
qp
.
fontMetrics
(
)
fw
=
metrics
.
width
(
str
(
self
.
num
[
j
]
)
)
qp
.
drawText
(
i
-
fw
/
2
,
h
/
2
,
str
(
self
.
num
[
j
]
)
)
j
=
j
+
1
class
Example
(
QWidget
)
:
def
__init__
(
self
)
:
super
(
)
.
__init__
(
)
self
.
initUI
(
)
def
initUI
(
self
)
:
OVER_CAPACITY
=
750
sld
=
QSlider
(
Qt
.
Horizontal
,
self
)
sld
.
setFocusPolicy
(
Qt
.
NoFocus
)
sld
.
setRange
(
1
,
OVER_CAPACITY
)
sld
.
setValue
(
75
)
sld
.
setGeometry
(
30
,
40
,
150
,
30
)
self
.
c
=
Communicate
(
)
self
.
wid
=
BurningWidget
(
)
self
.
c
.
updateBW
[
int
]
.
connect
(
self
.
wid
.
setValue
)
sld
.
valueChanged
[
int
]
.
connect
(
self
.
changeValue
)
hbox
=
QHBoxLayout
(
)
hbox
.
addWidget
(
self
.
wid
)
vbox
=
QVBoxLayout
(
)
vbox
.
addStretch
(
1
)
vbox
.
addLayout
(
hbox
)
self
.
setLayout
(
vbox
)
self
.
setGeometry
(
300
,
300
,
390
,
210
)
self
.
setWindowTitle
(
'Burning widget'
)
self
.
show
(
)
def
changeValue
(
self
,
value
)
:
self
.
c
.
updateBW
.
emit
(
value
)
self
.
wid
.
repaint
(
)
if
__name__
==
'__main__'
:
app
=
QApplication
(
sys
.
argv
)
ex
=
Example
(
)
sys
.
exit
(
app
.
exec_
(
)
)
```
终于翻到底部了
,
能看到这里
,
给你自己一个奖励吧!!!
```python
┌─┐ ┌─┐ + + ┌──┘ ┴───────┘ ┴──┐++ │ │ │ ─── │++ + + + ███████───███████ │+ │ │+ │ ─┴─ │ │ │ └───┐ ┌───┘ │ │ │ │ + + │ │ │ └──────────────┐ │ │ │ ├─┐ │ ┌─┘ │ │ └─┐ ┐ ┌───────┬──┐ ┌──┘ + + + + │ ─┤ ─┤ │ ─┤ ─┤ └──┴──┘ └──┴──┘ + + + + 神兽保佑
代码无BUG!