如何使用PyQT
- 创建窗口
# -*- coding:utf-8 -*-
#
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_()
* 组件
* 标签
# -*- coding:utf-8 -*-
#
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)
label = QtGui.QLabel('PyQt\nLabel')
label.setAlignment(QtCore.Qt.AlignCenter)
self.setCentralWidget(label)
app = QtGui.QApplication(sys.argv)
mywindow = MyWindow()
mywindow.show()
app.exec_()
* 布局组件和空白项
# -*- coding:utf-8 -*-
#
import sys
from PyQt4 import QtCore, QtGui
class MyWindow(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setWindowTitle('PyQt')
self.resize(300, 200)
gridlayout = QtGui.QGridLayout()
hboxlayout1 = QtGui.QHBoxLayout()
hboxlayout2 = QtGui.QHBoxLayout()
vboxlayout1 = QtGui.QVBoxLayout()
vboxlayout2 = QtGui.QVBoxLayout()
label1 = QtGui.QLabel('Label1', self)
label1.setAlignment(QtCore.Qt.AlignCenter)
label2 = QtGui.QLabel('Label2')
label3 = QtGui.QLabel('Label3')
label4 = QtGui.QLabel('Label4')
label5 = QtGui.QLabel('Label5')
hboxlayout1.addWidget(label1)
vboxlayout1.addWidget(label2)
vboxlayout1.addWidget(label3)
vboxlayout2.addWidget(label4)
vboxlayout2.addWidget(label5)
hboxlayout2.addLayout(vboxlayout1)
hboxlayout2.addLayout(vboxlayout2)
gridlayout.addLayout(hboxlayout1, 0, 0)
gridlayout.addLayout(hboxlayout2, 1, 0)
gridlayout.setRowMinimumHeight(1, 180)
self.setLayout(gridlayout)
app = QtGui.QApplication(sys.argv)
mywindow = MyWindow()
mywindow.show()
app.exec_()
# -*- coding:utf-8 -*-
#
import sys
from PyQt4 import QtCore, QtGui
class MyWindow(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setWindowTitle('PyQt')
self.resize(300, 200)
gridlayout = QtGui.QGridLayout()
spacer1 = QtGui.QSpacerItem(300, 40)
spacer2 = QtGui.QSpacerItem(300, 40)
label = QtGui.QLabel('Label', self)
label.setAlignment(QtCore.Qt.AlignCenter)
gridlayout.addItem(spacer1, 0, 0)
gridlayout.addWidget(label, 1, 0)
gridlayout.addItem(spacer2, 2, 0)
self.setLayout(gridlayout)
app = QtGui.QApplication(sys.argv)
mywindow = MyWindow()
mywindow.show()
app.exec_()
* 按钮
# -*- coding:utf-8 -*-
#
import sys
from PyQt4 import QtCore, QtGui
class MyWindow(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setWindowTitle('PyQt')
self.resize(300, 200)
gridlayout = QtGui.QGridLayout()
button1 = QtGui.QPushButton("Button1")
gridlayout.addWidget(button1, 1, 1, 1, 3)
button2 = QtGui.QPushButton('Button2')
button2.setFlat(True)
gridlayout.addWidget(button2, 2, 2)
self.setLayout(gridlayout)
app = QtGui.QApplication(sys.argv)
mywindow = MyWindow()
mywindow.show()
app.exec_()
* 信号和插槽
# -*- coding:utf-8 -*-
#
import sys
from PyQt4 import QtCore, QtGui
class MyWindow(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setWindowTitle('PyQt')
self.resize(300, 200)
gridlayout = QtGui.QGridLayout()
self.button1 = QtGui.QPushButton("Button1")
gridlayout.addWidget(self.button1, 1, 1, 1, 3)
self.button2 = QtGui.QPushButton('Button2')
# self.button2.setFlat(True)
gridlayout.addWidget(self.button2, 2, 2)
self.setLayout(gridlayout)
self.connect(self.button1,
QtCore.SIGNAL('clicked()'),
self.OnButton1)
self.connect(self.button2,
QtCore.SIGNAL('clicked()'),
self.OnButton2)
def OnButton1(self):
self.button1.setText('clicked')
def OnButton2(self):
self.button2.setText('clicked')
app = QtGui.QApplication(sys.argv)
mywindow = MyWindow()
mywindow.show()
app.exec_()
* 文本框
* 单行文本框
# -*- coding:utf-8 -*-
#
import sys
from PyQt4 import QtCore, QtGui
class MyWindow(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setWindowTitle('PyQt')
self.resize(300, 200)
gridlayout = QtGui.QGridLayout()
label1 = QtGui.QLabel('Normal Lineedit')
label1.setAlignment(QtCore.Qt.AlignCenter)
gridlayout.addWidget(label1, 0, 0)
edit1 = QtGui.QLineEdit()
gridlayout.addWidget(edit1, 1, 0)
label2 = QtGui.QLabel('Password')
label2.setAlignment(QtCore.Qt.AlignCenter)
gridlayout.addWidget(label2, 2, 0)
edit2 = QtGui.QLineEdit()
edit2.setEchoMode(QtGui.QLineEdit.Password)
gridlayout.addWidget(edit2, 3, 0)
self.setLayout(gridlayout)
app = QtGui.QApplication(sys.argv)
mywindow = MyWindow()
mywindow.show()
app.exec_()
* 多行文本框
# -*- coding:utf-8 -*-
#
import sys
from PyQt4 import QtCore, QtGui
class MyWindow(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setWindowTitle('PyQt')
self.resize(300, 200)
gridlayout = QtGui.QGridLayout()
label = QtGui.QLabel('TextEdit')
label.setAlignment(QtCore.Qt.AlignCenter)
gridlayout.addWidget(label, 0, 0)
edit = QtGui.QTextEdit()
edit.setText('Python\nPyQt')
gridlayout.addWidget(edit, 1, 0)
self.setLayout(gridlayout)
app = QtGui.QApplication(sys.argv)
mywindow = MyWindow()
mywindow.show()
app.exec_()
* 单选框和复选框
# -*- coding:utf-8 -*-
#
import sys
from PyQt4 import QtCore, QtGui
class MyWindow(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setWindowTitle('PyQt')
self.resize(300, 200)
gridlayout = QtGui.QGridLayout()
self.label1 = QtGui.QLabel('Label1')
self.label2 = QtGui.QLabel('Label2')
gridlayout.addWidget(self.label1, 1, 2)
gridlayout.addWidget(self.label2, 2, 2)
self.radio1 = QtGui.QRadioButton('Radio1')
self.radio2 = QtGui.QRadioButton('Radio2')
self.radio3 = QtGui.QRadioButton('Radio3')
self.radio1.setChecked(True)
gridlayout.addWidget(self.radio1, 1, 1)
gridlayout.addWidget(self.radio2, 2, 1)
gridlayout.addWidget(self.radio3, 3, 1)
self.check = QtGui.QCheckBox('check')
self.check.setChecked(True)
gridlayout.addWidget(self.check, 3, 2)
self.button = QtGui.QPushButton('Test')
gridlayout.addWidget(self.button, 4, 1, 1,2)
self.setLayout(gridlayout)
self.connect(self.button,
QtCore.SIGNAL('clicked()'),
self.OnButton)
def OnButton(self):
if self.radio1.isChecked():
self.radio1.setText('Radio1')
elif self.radio2.isChecked():
self.radio1.setText('Radio2')
else:
self.label1.setText('Radio3')
if self.check.isChecked():
self.label2.setText('checked')
else:
self.label2.SetText('uncheck')
app = QtGui.QApplication(sys.argv)
mywindow = MyWindow()
mywindow.show()
app.exec_()
* 菜单
* 创建菜单
# -*- coding:utf-8 -*-
#
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)
menubar = self.menuBar()
file = menubar.addMenu('&File')
file.addAction('Open')
file.addAction('Save')
file.addSeparator()
file.addAction('Close')
edit = menubar.addMenu('&Edit')
edit.addAction('Copy')
edit.addAction('Paste')
edit.addAction('Cut')
edit.addAction('SelectAll')
help = menubar.addMenu('&Help')
help.addAction('About')
app = QtGui.QApplication(sys.argv)
mywindow = MyWindow()
mywindow.show()
app.exec_()
* 菜单事件
# -*- coding:utf-8 -*-
#
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)
self.label = QtGui.QLabel('Menu Action')
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.setCentralWidget(self.label)
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)
def OnOpen(self):
self.label.setText('Menu Action: Open')
def OnSave(self):
self.label.setText('Menu Action: Save')
def OnClose(self):
self.close()
def contextMenuEvent(self, event):
self.file.exec_(event.globalPos())
app = QtGui.QApplication(sys.argv)
mywindow = MyWindow()
mywindow.show()
app.exec_()
- 对话框
- 消息框和标准对话框
# -*- coding:utf-8 -*-
#
import sys
from PyQt4 import QtCore, QtGui
class MyWindow(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setWindowTitle('PyQt')
self.resize(300, 200)
gridlayout = QtGui.QGridLayout()
self.label = QtGui.QLabel('MessBox example')
gridlayout.addWidget(self.label, 1, 3, 1, 3)
self.button1 = QtGui.QPushButton('About')
gridlayout.addWidget(self.button1, 2, 1)
self.button2 = QtGui.QPushButton('AboutQt')
gridlayout.addWidget(self.button2, 2, 2)
self.button3 = QtGui.QPushButton('Critical')
gridlayout.addWidget(self.button3, 2, 3)
self.button4 = QtGui.QPushButton('About')
gridlayout.addWidget(self.button4, 2, 4)
self.button5 = QtGui.QPushButton('AboutQt')
gridlayout.addWidget(self.button5, 2, 5)
self.button6 = QtGui.QPushButton('Critical')
gridlayout.addWidget(self.button6, 2, 6)
spacer = QtGui.QSpacerItem(200, 80)
gridlayout.addItem(spacer, 3, 1, 1, 5)
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)
self.connect(self.button4,
QtCore.SIGNAL('clicked()'),
self.OnButton4)
self.connect(self.button5,
QtCore.SIGNAL('clicked()'),
self.OnButton5)
self.connect(self.button6,
QtCore.SIGNAL('clicked()'),
self.OnButton6)
def OnButton1(self):
self.button1.setText('clicked')
QtGui.QMessageBox.about(self, 'PyQt', 'About')
def OnButton2(self):
self.button2.setText('clicked')
QtGui.QMessageBox.aboutQt(self, 'PyQt')
def OnButton3(self):
self.button3.setText('clicked')
r = QtGui.QMessageBox.critical(self, 'PyQt',
'Critical',
QtGui.QMessageBox.Abort,
QtGui.QMessageBox.Retry,
QtGui.QMessageBox.Ignore)
if r == QtGui.QMessageBox.Abort:
self.label.setText('About')
elif r == QtGui.QMessageBox.Retry:
self.label.setText('Retry')
else:
self.label.setText('Ignore')
def OnButton4(self):
self.button4.setText('clicked')
QtGui.QMessageBox.information(self, 'PyQt', 'Information')
def OnButton5(self):
self.button5.setText('clicked')
r = QtGui.QMessageBox.question(self, 'PyQt',
'Question',
QtGui.QMessageBox.Yes,
QtGui.QMessageBox.No,
QtGui.QMessageBox.Cancel)
def OnButton6(self):
self.button6.setText('clicked')
r = QtGui.QMessageBox.warning(self, 'PyQt',
'Warning',
QtGui.QMessageBox.Yes,
QtGui.QMessageBox.No)
app = QtGui.QApplication(sys.argv)
mywindow = MyWindow()
mywindow.show()
app.exec_()
# -*- coding:utf-8 -*-
#
import sys
from PyQt4 import QtCore, QtGui
class MyWindow(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setWindowTitle('PyQt')
self.resize(300, 200)
gridlayout = QtGui.QGridLayout()
self.label = QtGui.QLabel('StandardDialog example')
gridlayout.addWidget(self.label, 1, 2)
self.button1 = QtGui.QPushButton('File')
gridlayout.addWidget(self.button1, 2, 1)
self.button2 = QtGui.QPushButton('Font')
gridlayout.addWidget(self.button2, 2, 2)
self.button3 = QtGui.QPushButton('Color')
gridlayout.addWidget(self.button3, 2, 3)
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):
self.button1.setText('clicked')
filename = QtGui.QFileDialog.getOpenFileName(self, 'Open')
if not filename.isEmpty():
self.label.setText(filename)
def OnButton2(self):
self.button2.setText('clicked')
font, ok = QtGui.QFontDialog.getFont()
if ok:
self.label.setText(font.key())
def OnButton3(self):
self.button3.setText('clicked')
color = QtGui.QColorDialog.getColor()
if color.isValid():
self.label.setText(color.name())
app = QtGui.QApplication(sys.argv)
mywindow = MyWindow()
mywindow.show()
app.exec_()
* 自定义对话框
# -*- coding:utf-8 -*-
#
import sys
from PyQt4 import QtCore, QtGui
class MyDialog(QtGui.QDialog):
def __init__(self):
QtGui.QDialog.__init__(self)
self.gridlayout = QtGui.QGridLayout()
self.label = QtGui.QLabel('Input')
self.gridlayout.addWidget(self.label, 0, 0)
self.edit = QtGui.QLineEdit()
self.gridlayout.addWidget(self.edit, 0, 1)
self.ok = QtGui.QPushButton('Ok')
self.gridlayout.addWidget(self.ok, 1, 0)
self.cancel = QtGui.QPushButton('Cancel')
self.gridlayout.addWidget(self.cancel, 1, 1)
self.setLayout(self.gridlayout)
self.connect(self.ok,
QtCore.SIGNAL('clicked()'),
self.OnOk)
self.connect(self.cancel,
QtCore.SIGNAL('clicked()'),
self.OnCancel)
def OnOk(self):
self.text = self.edit.text()
self.done(1)
def OnCancel(self):
self.done(0)
class MyWindow(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setWindowTitle('PyQt')
self.resize(300, 200)
gridlayout = QtGui.QGridLayout()
self.button = QtGui.QPushButton('CreateDialog')
gridlayout.addWidget(self.button, 1, 1)
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.text)
app = QtGui.QApplication(sys.argv)
mywindow = MyWindow()
mywindow.show()
app.exec_()
什么是PyQT
PyQt是对Qt的封装。Qt是面向对象的图形用户界面库,可以在多个操作系统上使用。
与其他的开源GUI库相比,Qt库显得过于庞大。
另外,Qt虽然是开源GUI库,但是其许可证限制复杂。