Qt Designer 是交互式可視化GUI設計工具,能夠幫助咱們快速開發 PyQt 程序的速度。python
它生成的 UI 界面是一個後綴爲 .ui 的文件,能夠經過 pyiuc 轉換爲 .py 文件。 app
在模板選項中,最經常使用的是 Widget (通用窗口) 和 Main Window (主窗口)。函數
Widget Box 其中提供了不少控件,能夠直接拖放到主窗口中。在菜單欄選擇 「Form」 -> "Preview", 或者按「Ctrl + R」便可預覽。工具
Object Inspactor 裏邊是對象列表,能夠看出對象的層次關係。佈局
Property Editor 能夠編輯對象的屬性ui
Signal / slot Editor 編輯信號,管理圖片this
利用 加載好的 PyUIC 工具 轉變爲 pyspa
轉換成功的 myMainWindow.py 代碼以下所示命令行
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'myMainWindow.ui' # # Created by: PyQt5 UI code generator 5.6 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_myMainWindow(object): def setupUi(self, myMainWindow): myMainWindow.setObjectName("myMainWindow") myMainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(myMainWindow) self.centralwidget.setObjectName("centralwidget") self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(140, 270, 75, 23)) self.pushButton.setObjectName("pushButton") myMainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(myMainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23)) self.menubar.setObjectName("menubar") myMainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(myMainWindow) self.statusbar.setObjectName("statusbar") myMainWindow.setStatusBar(self.statusbar) self.retranslateUi(myMainWindow) QtCore.QMetaObject.connectSlotsByName(myMainWindow) def retranslateUi(self, myMainWindow): _translate = QtCore.QCoreApplication.translate myMainWindow.setWindowTitle(_translate("myMainWindow", "MainWindow")) self.pushButton.setText(_translate("myMainWindow", "Confirm"))
經過轉換 ui 文件爲 py 文件,獲得的只是界面的 ui 的類, 並不包括啓動界面的函數,咱們稱之爲界面文件。須要一個新建一個 py 文件調用文件,這個新建的文件咱們稱爲邏輯文件。設計
新建一個 CallmyMainWindow.py 代碼以下
# -*- coding: utf-8 -*- import sys from PyQt5.QtWidgets import QApplication , QMainWindow from myMainWindow import * class MyMainWindow(QMainWindow, Ui_myMainWindow): def __init__(self, parent=None): super(MyMainWindow, self).__init__(parent) self.setupUi(self) if __name__=="__main__": # 每一pyqt5應用程序必須建立一個應用程序對象。sys.argv參數是一個列表,從命令行輸入參數。 app = QApplication(sys.argv) myWin = MyMainWindow() # 顯示在屏幕上 myWin.show() # 系統exit()方法確保應用程序乾淨的退出 # 的exec_()方法有下劃線。由於執行是一個Python關鍵詞。所以,exec_()代替 sys.exit(app.exec_())
四種佈局方式
新建一個文本框( lineEdit) 和一個按鈕 ( pushButton ).選中右鍵佈局
# WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_myMainWindow(object): def setupUi(self, myMainWindow): myMainWindow.setObjectName("myMainWindow") myMainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(myMainWindow) self.centralwidget.setObjectName("centralwidget") self.widget = QtWidgets.QWidget(self.centralwidget) self.widget.setGeometry(QtCore.QRect(130, 190, 216, 25)) self.widget.setObjectName("widget") self.horizontalLayout = QtWidgets.QHBoxLayout(self.widget) self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setObjectName("horizontalLayout") self.lineEdit = QtWidgets.QLineEdit(self.widget) self.lineEdit.setObjectName("lineEdit") self.horizontalLayout.addWidget(self.lineEdit) self.pushButton = QtWidgets.QPushButton(self.widget) self.pushButton.setObjectName("pushButton") self.horizontalLayout.addWidget(self.pushButton) myMainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(myMainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23)) self.menubar.setObjectName("menubar") myMainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(myMainWindow) self.statusbar.setObjectName("statusbar") myMainWindow.setStatusBar(self.statusbar) self.retranslateUi(myMainWindow) QtCore.QMetaObject.connectSlotsByName(myMainWindow) def retranslateUi(self, myMainWindow): _translate = QtCore.QCoreApplication.translate myMainWindow.setWindowTitle(_translate("myMainWindow", "MainWindow")) self.pushButton.setText(_translate("myMainWindow", "Confirm"))
QpushButton 和 QlineEdit 構建時父對象都是 QWidget 佈局對象 QHBoxLayout 也是。
在左側 Containers 拖入一個 frame 控件,而後放入 LineEdit 、 Button 控件。
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_myMainWindow(object): def setupUi(self, myMainWindow): myMainWindow.setObjectName("myMainWindow") myMainWindow.resize(800, 600) self.centralwidget = QtWidgets.QWidget(myMainWindow) self.centralwidget.setObjectName("centralwidget") self.frame = QtWidgets.QFrame(self.centralwidget) self.frame.setGeometry(QtCore.QRect(170, 270, 411, 161)) self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel) self.frame.setFrameShadow(QtWidgets.QFrame.Raised) self.frame.setObjectName("frame") self.lineEdit = QtWidgets.QLineEdit(self.frame) self.lineEdit.setGeometry(QtCore.QRect(20, 50, 214, 20)) self.lineEdit.setObjectName("lineEdit") self.pushButton = QtWidgets.QPushButton(self.frame) self.pushButton.setGeometry(QtCore.QRect(280, 50, 75, 23)) self.pushButton.setObjectName("pushButton") myMainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(myMainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23)) self.menubar.setObjectName("menubar") myMainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(myMainWindow) self.statusbar.setObjectName("statusbar") myMainWindow.setStatusBar(self.statusbar) self.retranslateUi(myMainWindow) QtCore.QMetaObject.connectSlotsByName(myMainWindow) def retranslateUi(self, myMainWindow): _translate = QtCore.QCoreApplication.translate myMainWindow.setWindowTitle(_translate("myMainWindow", "MainWindow")) self.pushButton.setText(_translate("myMainWindow", "Confirm"))
容器Qframe 與子控件之間有一個 QHBoxLayout,使用容器進行控件佈局本質上仍是調用佈局管理器進行的。