1.学习网站
http://code.py40.com/pyqt5/38.html
2.安装
(1)pip install PyQt5
(2)pip install PyQt5-tools (安装qt designer)
在Python的安装目录下可以找到pyuic.exe和pyrcc.exe
主要是用pyuic把qt designer的界面转换成py代码
3.导入qt designer,pyuic
4.使用qt designer设计界面
5.右键点击ui文件,选择external tools,选择pyuic,把ui转成py代码。这里只是界面代码,注意每次使用pyuic生成都会覆盖旧的文件。
6.剩下的和使用C++写的QT差不多。
小例子如下:
#!/usr/bin/python3
#-*- coding:utf-8 -*-
import sys
from PyQt5.QtWidgets import QApplication,QMainWindow,QToolTip,QPushButton,QMessageBox,QDesktopWidget
from PyQt5.QtWidgets import qApp,QAction,QLabel
from PyQt5.QtGui import QFont,QIcon
from PyQt5.QtCore import QCoreApplication,pyqtSignal,QObject
import MyMainWidget
import subwidget
if __name__ == '__main__':
app = QApplication(sys.argv) #应用程序对象
mywidget = MyMainWidget.MyMainWidget()#模块名.函数名
mywidget.show()
#如果使用qt designer 需要把界面初始化
#MainWindow = QMainWindow()
#ui = Ui_MainWindow()
#ui.setupUi(MainWindow)#setupUi()是由.ui文件生成的类的构造函数(初始化界面)
#MainWindow.show()
sys.exit(app.exec_())#主窗口销毁或者exit调用时退出主线程循环
#!/usr/bin/python3
#-*- coding:utf-8 -*-
from PyQt5.QtWidgets import QApplication,QMainWindow,QToolTip,QPushButton,QMessageBox,QDesktopWidget
from PyQt5.QtWidgets import qApp,QAction,QLabel
from PyQt5.QtGui import QFont,QIcon
from PyQt5.QtCore import QCoreApplication,pyqtSignal,QObject,Qt
import main_widget
import subwidget
class MyMainWidget(QMainWindow):
def __init__(self):
super().__init__() #构造函数
ui = main_widget.Ui_MainWindow()
ui.setupUi(self)
self.setWindowTitle('main')
self.statusBar().showMessage('状态栏')
self.setWindowIcon(QIcon('1.jpg'))
self.mysub = subwidget.Widget()
self.mysub.mycloseSignal.connect(self.my_sub_slot)
QToolTip.setFont(QFont('SansSerif', 10))
ui.pushButton.setToolTip("btn <b>1111</b>")
ui.pushButton.clicked.connect(QCoreApplication.instance().quit) # 信号和槽
ui.pushButton_2.clicked.connect(self.buttonClicked)
exitAction = QAction(QIcon("1.jpg"), '&Exit')
exitAction.setShortcut('Ctrl+Q')
exitAction.setStatusTip('Exit')
exitAction.triggered.connect(qApp.quit)
menubar = self.menuBar()
fileMenu = menubar.addMenu('&File')
fileMenu.addAction(exitAction)
toolBar = self.addToolBar('quit')
toolBar.addAction(exitAction)
#self.setCentralWidget(self.mysub)
def buttonClicked(self):
sender = self.sender()
print('clicked slot')
print(sender.text())
self.mysub.show()
self.statusBar().showMessage("打开新窗口")
def my_sub_slot(self):
print('sub slot')
#self.mysub.close()
self.mysub.hide()
self.statusBar().showMessage("关闭新窗口")
def center(self):
qr = self.frameGeometry()
cp = QDesktopWidget().availableGeometry().center()
qr.moveCenter(cp)
self.resize(300,200)
self.move(qr.topLeft())
def keyPressEvent(self,e):
if e.key == Qt.key_Escape:
self.close()
from PyQt5.QtWidgets import QWidget,QLabel,QVBoxLayout,QPushButton,QMessageBox
from PyQt5.QtCore import pyqtSignal
from PyQt5.QtGui import QPixmap
class Widget(QWidget):
mycloseSignal = pyqtSignal()
def __init__(self):
super().__init__()
self.resize(500,500)
label=QLabel('1,jpg')
label.setPixmap(QPixmap('1.jpg'))
btn = QPushButton('退出')
vl = QVBoxLayout()
vl.addWidget(label)
vl.addWidget(btn)
self.setLayout(vl)
btn.clicked.connect(self.btnClicked)
def btnClicked(self):
print('subwidget btn clicked')
self.mycloseSignal.emit()
def closeEvent(self, event):
reply = QMessageBox.question('Message', "is quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()