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_() |