PyQt的简介和基本安装方法读者可以自行google解决。先声明,本文章教基础,参考《征服Python》相关章节。不过不得不说,pyQt的教程真的好少,╮(╯▽╰)╭,悲催,大家有什么好的资料推荐一下,谢谢了。
先建立一个基本的界面看看:
1
2
3
4
5
6
7
8
9
10
11
12
|
import
sys
from
PyQt4
import
QtCore, QtGui
class
MyWindow( QtGui.QMainWindow ):
def
__init__(
self
):
QtGui.QMainWindow.__init__(
self
)
self
.setWindowTitle(
"PyQt"
)
self
.resize(
300
,
200
)
app
=
QtGui.QApplication( sys.argv )
mywindow
=
MyWindow()
mywindow.show()
app.exec_()
|
运行结果:
然后我们添加一个标签:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
#coding=utf-8
#标签的使用
import
sys
from
PyQt4
import
QtCore, QtGui
class
Window( QtGui.QMainWindow ):
def
__init__(
self
):
super
( Window,
self
).__init__()
self
.setWindowTitle(
"hello"
)
self
.resize(
200
,
300
)
#添加标签
label
=
QtGui.QLabel(
"label"
)
label.setAlignment( QtCore.Qt.AlignCenter )
self
.setCentralWidget( label )
app
=
QtGui.QApplication( sys.argv )
demo
=
Window()
demo.show()
app.exec_()
|
效果如下:
基本布局:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
#coding=gbk
import
sys
from
PyQt4
import
QtCore, QtGui
class
Window( QtGui.QWidget ):
def
__init__(
self
):
super
( Window,
self
).__init__()
self
.setWindowTitle(
"hello"
)
self
.resize(
500
,
500
)
hBoxLayout1
=
QtGui.QHBoxLayout()
label1
=
QtGui.QLabel(
"Label1"
)
label2
=
QtGui.QLabel(
"Label2"
)
label3
=
QtGui.QLabel(
"Label3"
)
label4
=
QtGui.QLabel(
"Label4"
)
label5
=
QtGui.QLabel(
"Label5"
)
#---------添加表格布局
gridLayout
=
QtGui.QGridLayout()
gridLayout.addWidget( label1 ,
0
,
0
)
gridLayout.addWidget( label2 ,
0
,
1
)
gridLayout.addWidget( label3 ,
0
,
2
)
gridLayout.addWidget( label4 ,
1
,
0
)
gridLayout.addWidget( label5 ,
1
,
1
)
self
.setLayout( gridLayout )
#-------添加水平布局
# hBoxLayout1.addWidget( label1 )
# hBoxLayout1.addWidget( label2 )
# hBoxLayout1.addWidget( label3 )
# hBoxLayout1.addWidget( label4 )
# hBoxLayout1.addWidget( label5 )
#
# self.setLayout( hBoxLayout1 )
#---------添加垂直布局
# vBoxLayout = QtGui.QVBoxLayout()
# vBoxLayout.addWidget( label1 )
# vBoxLayout.addWidget( label2 )
# vBoxLayout.addWidget( label3 )
# vBoxLayout.addWidget( label4 )
# vBoxLayout.addWidget( label5 )
#
# self.setLayout( vBoxLayout )
#
app
=
QtGui.QApplication( sys.argv )
demo
=
Window()
demo.show()
app.exec_()
|
效果:
按钮基本使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#coding=utf-8
#按钮操作
import
sys
from
PyQt4
import
QtGui, QtCore
class
Window( QtGui.QWidget ):
def
__init__(
self
):
super
( Window,
self
).__init__()
self
.setWindowTitle(
"hello"
)
self
.resize(
500
,
500
)
gridlayout
=
QtGui.QGridLayout()
button1
=
QtGui.QPushButton(
"button1"
)
gridlayout.addWidget( button1,
0
,
0
,
1
,
3
)
button2
=
QtGui.QPushButton(
"button2"
)
button2.setFlat(
True
)
gridlayout.addWidget( button2,
1
,
1
,
1
,
3
)
self
.setLayout( gridlayout )
app
=
QtGui.QApplication( sys.argv )
demo
=
Window()
demo.show()
app.exec_()
|
不过按钮2当你点击的时候才显示出来哦
现在看看单行文本和多行文本
#coding=utf-8
import
sys
from
PyQt4
import
QtGui, QtCore
class
Window( QtGui.QWidget ):
def
__init__(
self
):
super
( Window,
self
).__init__()
self
.setWindowTitle(
"hello"
)
self
.resize(
500
,
500
)
gridlayout
=
QtGui.QGridLayout()
str
=
"hello"
#这里中文乱码,纠结
label
=
QtGui.QLabel(
str
)
label.setAlignment( QtCore.Qt.AlignCenter )
textFile
=
QtGui.QLineEdit()
gridlayout.addWidget( label,
0
,
0
)
gridlayout.addWidget( textFile )
passwordFile
=
QtGui.QLineEdit()
passwordFile.setEchoMode( QtGui.QLineEdit.Password )
gridlayout.addWidget( passwordFile )
textArea
=
QtGui.QTextEdit()
textArea.setText(
"asdasda"
)
gridlayout.addWidget( textArea )
self
.setLayout( gridlayout )
app
=
QtGui.QApplication( sys.argv )
window
=
Window()
window.show()
app.exec_()
|
单选和复选框
import
sys
from
PyQt4
import
QtGui, QtCore
class
Window( QtGui.QWidget ):
def
__init__(
self
):
super
( Window,
self
).__init__()
self
.setWindowTitle(
"hello"
)
self
.resize(
500
,
500
)
hboxlayout
=
QtGui.QHBoxLayout()
self
.radio1
=
QtGui.QRadioButton(
"radio1"
)
self
.radio2
=
QtGui.QRadioButton(
"radio2"
)
self
.radio3
=
QtGui.QRadioButton(
"radio3"
)
self
.radio1.setChecked(
True
)
hboxlayout.addWidget(
self
.radio1 )
hboxlayout.addWidget(
self
.radio2 )
hboxlayout.addWidget(
self
.radio3 )
checkbox1
=
QtGui.QCheckBox(
"checkbox1"
)
checkbox2
=
QtGui.QCheckBox(
"checkbox2"
)
checkbox3
=
QtGui.QCheckBox(
"checkbox3"
)
checkbox1.setChecked(
True
)
hboxlayout.addWidget( checkbox1 )
hboxlayout.addWidget( checkbox2 )
hboxlayout.addWidget( checkbox3 )
self
.button
=
QtGui.QPushButton(
"Ok"
)
hboxlayout.addWidget(
self
.button )
self
.connect(
self
.button, QtCore.SIGNAL(
'clicked()'
),
self
.OnButton )
self
.setLayout( hboxlayout )
def
OnButton(
self
):
if
self
.radio2.isChecked():
self
.radio2.setText(
"haha"
)
app
=
QtGui.QApplication( sys.argv )
win
=
Window()
win.show()
app.exec_()
|
现在看看菜单:
#coding=utf-8
#菜单事件
import
sys
from
PyQt4
import
QtGui, QtCore
class
Window( QtGui.QMainWindow ):
def
__init__(
self
):
super
( Window,
self
).__init__()
self
.setWindowTitle(
"hello"
)
self
.resize(
500
,
500
)
menubar
=
self
.menuBar()
self
.
file
=
menubar.addMenu(
'&File'
)
open
=
self
.
file
.addAction(
'Open'
)
self
.connect(
open
, QtCore.SIGNAL(
'triggered()'
),
self
.OnOpen )
save
=
self
.
file
.addAction(
'Save'
)
self
.connect( save, QtCore.SIGNAL(
'triggered()'
),
self
.OnSave )
self
.
file
.addSeparator()
close
=
self
.
file
.addAction(
"Close"
)
self
.connect( close, QtCore.SIGNAL(
'triggered()'
),
self
.OnClose )
self
.label
=
QtGui.QLabel(
"this is a google test"
)
self
.label.setAlignment( QtCore.Qt.AlignCenter )
self
.setCentralWidget(
self
.label )
def
OnOpen(
self
):
self
.label.setText(
"open"
)
def
OnSave(
self
):
self
.label.setText(
"save"
)
def
OnClose(
self
):
self
.close()
def
contextMenuEvent(
self
, event ):
self
.
file
.exec_( event.globalPos() )
app
=
QtGui.QApplication( sys.argv )
win
=
Window()
win.show()
app.exec_()
|
点击右键也可以看看哦
现在是对话框的代码:
#coding=utf-8
#对话框
import
sys
from
PyQt4
import
QtGui, QtCore
class
Window( QtGui.QWidget ):
def
__init__(
self
):
super
( Window,
self
).__init__()
self
.setWindowTitle(
"hello"
)
self
.resize(
500
,
500
)
gridlayout
=
QtGui.QGridLayout()
self
.AboutButton
=
QtGui.QPushButton(
"About"
)
gridlayout.addWidget(
self
.AboutButton,
0
,
0
)
self
.AboutQtButton
=
QtGui.QPushButton(
"AboutQt"
)
gridlayout.addWidget(
self
.AboutQtButton,
0
,
1
)
self
.CriticalButton
=
QtGui.QPushButton(
"CriticalButton"
)
gridlayout.addWidget(
self
.CriticalButton,
1
,
0
)
self
.InfoButton
=
QtGui.QPushButton(
"Info"
)
gridlayout.addWidget(
self
.InfoButton,
1
,
1
)
self
.QuestionButton
=
QtGui.QPushButton(
"Question"
)
gridlayout.addWidget(
self
.QuestionButton,
2
,
0
)
self
.WarningButton
=
QtGui.QPushButton(
"Warning"
)
gridlayout.addWidget(
self
.WarningButton,
2
,
1
)
spacer
=
QtGui.QSpacerItem(
200
,
80
)
gridlayout.addItem( spacer,
3
,
1
,
1
,
5
)
self
.setLayout( gridlayout )
self
.connect(
self
.AboutButton, QtCore.SIGNAL(
'clicked()'
),
self
.OnAboutButton )
self
.connect(
self
.AboutQtButton, QtCore.SIGNAL(
'clicked()'
),
self
.OnAboutQtButton )
self
.connect(
self
.CriticalButton, QtCore.SIGNAL(
'clicked()'
),
self
.OnCriticalButton )
self
.connect(
self
.InfoButton, QtCore.SIGNAL(
'clicked()'
),
self
.OnInfoButton )
self
.connect(
self
.QuestionButton, QtCore.SIGNAL(
'clicked()'
),
self
.OnQuestionButton )
self
.connect(
self
.WarningButton, QtCore.SIGNAL(
'clicked()'
),
self
.OnWarningButton )
def
OnAboutButton(
self
):
QtGui.QMessageBox.about(
self
,
'PyQt'
,
"About"
)
def
OnAboutQtButton(
self
):
QtGui.QMessageBox.aboutQt(
self
,
"PyQt"
)
def
OnCriticalButton(
self
):
r
=
QtGui.QMessageBox.critical(
self
,
"PyQT"
,
"CriticalButton"
, QtGui.QMessageBox.Abort,
QtGui.QMessageBox.Retry, QtGui.QMessageBox.Ignore )
if
r
=
=
QtGui.QMessageBox.Abort:
self
.setWindowTitle(
"Abort"
)
elif
r
=
=
QtGui.QMessageBox.Retry:
self
.setWindowTitle(
"Retry"
)
elif
r
=
=
QtGui.QMessageBox.Ignore:
self
.setWindowTitle(
"Ignore"
)
else
:
pass
def
OnInfoButton(
self
):
QtGui.QMessageBox.information(
self
,
"Pyqt"
,
"information"
)
def
OnQuestionButton(
self
):
r
=
QtGui.QMessageBox.question(
self
,
"PyQt"
,
"Question"
, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No, QtGui.QMessageBox.Cancel )
def
OnWarningButton(
self
):
r
=
QtGui.QMessageBox.warning(
self
,
"PyQT"
,
"warning"
, QtGui.QMessageBox.Yes, QtGui.QMessageBox.No )
app
=
QtGui.QApplication( sys.argv )
win
=
Window()
win.show()
app.exec_()
|
现在是文件选择,字体选择,颜色选择框:
#coding=utf-8
import
sys
from
PyQt4
import
QtGui, QtCore
class
Window( QtGui.QWidget ):
def
__init__(
self
):
super
( Window,
self
).__init__()
self
.setWindowTitle(
"hello"
)
self
.resize(
500
,
500
)
gridlayout
=
QtGui.QGridLayout()
self
.button1
=
QtGui.QPushButton(
"File"
)
self
.button2
=
QtGui.QPushButton(
"Font"
)
self
.button3
=
QtGui.QPushButton(
"Color"
)
gridlayout.addWidget(
self
.button1 )
gridlayout.addWidget(
self
.button2 )
gridlayout.addWidget(
self
.button3 )
spacer
=
QtGui.QSpacerItem(
200
,
80
)
gridlayout.addItem( spacer,
3
,
1
,
1
,
3
)
self
.setLayout( gridlayout )
self
.connect(
self
.button1, QtCore.SIGNAL(
'clicked()'
),
self
.OnButton1 )
self
.connect(
self
.button2, QtCore.SIGNAL(
'clicked()'
),
self
.OnButton2 )
self
.connect(
self
.button3, QtCore.SIGNAL(
'clicked()'
),
self
.OnButton3 )
def
OnButton1(
self
):
fileName
=
QtGui.QFileDialog.getOpenFileName(
self
,
'Open'
)
if
not
fileName.isEmpty():
self
.setWindowTitle( fileName )
def
OnButton2(
self
):
font, ok
=
QtGui.QFontDialog.getFont()
if
ok:
self
.setWindowTitle( font.key() )
def
OnButton3(
self
):
color
=
QtGui.QColorDialog.getColor()
if
color.isValid():
self
.setWindowTitle( color.name() )
app
=
QtGui.QApplication( sys.argv )
win
=
Window()
win.show()
app.exec_()
|
现在还是对话框:
#coding=utf-8
import
sys
from
PyQt4
import
QtGui, QtCore
class
MyDialog( QtGui.QDialog ):
def
__init__(
self
):
super
( MyDialog,
self
).__init__()
self
.setWindowTitle(
"Dialog"
)
self
.gridlayout
=
QtGui.QGridLayout()
self
.label
=
QtGui.QLabel(
"Please Input:"
)
self
.textField
=
QtGui.QLineEdit()
self
.okButton
=
QtGui.QPushButton(
"OK"
)
self
.cancalButton
=
QtGui.QPushButton(
"Cancel"
)
self
.gridlayout.addWidget(
self
.label ,
0
,
0
)
self
.gridlayout.addWidget(
self
.textField ,
0
,
1
)
self
.gridlayout.addWidget(
self
.cancalButton ,
0
,
2
)
self
.gridlayout.addWidget(
self
.okButton ,
0
,
3
)
self
.connect(
self
.okButton, QtCore.SIGNAL(
'clicked()'
),
self
.OnOk )
self
.connect(
self
.cancalButton, QtCore.SIGNAL(
'clicked()'
),
self
.OnCancel )
self
.setLayout(
self
.gridlayout )
def
OnOk(
self
):
self
.text
=
self
.textField.text()
self
.done(
1
)
def
OnCancel(
self
):
self
.done(
0
)
class
Window( QtGui.QWidget ):
def
__init__(
self
):
super
( Window,
self
).__init__()
self
.setWindowTitle(
"hello"
)
self
.resize(
400
,
300
)
hboxlayout
=
QtGui.QGridLayout()
self
.creatDialogButton
=
QtGui.QPushButton(
"Create a new Dialog"
)
hboxlayout.addWidget(
self
.creatDialogButton )
self
.setLayout( hboxlayout )
self
.connect(
self
.creatDialogButton, QtCore.SIGNAL(
'clicked()'
),
self
.OnButton )
def
OnButton(
self
):
dialog
=
MyDialog()
r
=
dialog.exec_()
if
r:
self
.creatDialogButton.setText( dialog.text )
app
=
QtGui.QApplication( sys.argv )
win
=
Window()
win.show()
app.exec_()
|
最后一个是利用Designer写的
利用他设计一个简单的界面,只有一个标签和一个文本框
代码如下:
#coding=utf-8
import
sys
from
PyQt4
import
QtGui, QtCore, uic
class
MyDialog( QtGui.QDialog ):
def
__init__(
self
):
super
( MyDialog,
self
).__init__()
uic.loadUi(
"res.ui"
,
self
)
class
MyWindow( QtGui.QWidget ):
def
__init__(
self
):
super
( MyWindow,
self
).__init__()
self
.setWindowTitle(
"hello"
)
self
.resize(
300
,
200
)
gridlayout
=
QtGui.QGridLayout()
self
.button
=
QtGui.QPushButton(
"CreateDialog"
)
gridlayout.addWidget(
self
.button )
self
.setLayout( gridlayout )
self
.connect(
self
.button, QtCore.SIGNAL(
'clicked()'
),
self
.OnButtoN )
def
OnButtoN(
self
):
dialog
=
MyDialog()
r
=
dialog.exec_();
if
r:
self
.button.setText( dialog.textField.text() )
app
=
QtGui.QApplication( sys.argv )
demo
=
MyWindow()
demo.show()
app.exec_()
|