PyQT5 QTDesigner窗口及組成的實(shí)現(xiàn)
一、主窗口成員
主窗口中的菜單欄、工具欄和狀態(tài)欄
1.菜單欄
我們可以直接在QTDesigner中輸入菜單選項(xiàng)即可。這些菜單選項(xiàng)本質(zhì)上都是動(dòng)作,關(guān)于動(dòng)作,在下面章節(jié)進(jìn)行描述。
2.工具欄(動(dòng)作)
要在工具欄中添加按鈕,我們首先要在QTDesigner的菜單欄中選擇視圖-->動(dòng)作編輯器,打開動(dòng)作編輯器:
因?yàn)?,能夠用于工具欄的控件并不是普通的pushButton按鈕,而是叫做Action的動(dòng)作。
此時(shí),我們就可以將需要的動(dòng)作(Action)拖拽到工具欄中:
當(dāng)然,我們可以自定義一些Action,并添加到工具欄中。
我們可以在鼠標(biāo)右鍵中選擇新建工具欄,從而創(chuàng)建多個(gè)工具欄(每個(gè)工具欄之間有4個(gè)豎點(diǎn)隔開):
注意:動(dòng)作編輯器中的所有動(dòng)作都是菜單欄和工具欄共用的。本質(zhì)上說,工具欄就是菜單欄中功能的快捷按鈕,方便用戶使用。
二、窗口類型
我們?cè)赒TDesigner中新建窗口的時(shí)候,可以看到有以下幾種窗口:
窗口大致分為三種,Main Window、Widget和Dialog。
Main Window:主窗口,其中包含菜單欄、工具欄、狀態(tài)欄,是我們經(jīng)常使用的窗口類型,一般用于程序的主窗口。
Dialog:對(duì)話窗口的基類,沒有菜單欄、工具欄、狀態(tài)欄,但可能有默認(rèn)的一些操作按鈕,例如確定、關(guān)閉等。
Widget:當(dāng)我們不確定窗口用途的時(shí)候,可以使用Widget窗口。
三、關(guān)閉窗口的兩種方式
第一種方式是發(fā)送信號(hào)調(diào)用主窗口的Close方法。
第二種方式是發(fā)送信號(hào)調(diào)用QApplication的quit方法(即退出整個(gè)程序)。
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget from ui3 import Ui_MainWindow class MyWindow(QMainWindow): def __init__(self): super(MyWindow, self).__init__() # 重寫close槽函數(shù) def close(self): print("這里我們重寫一下主窗口的close方法") super(MyWindow, self).close() # 調(diào)用App.quit()來退出程序 def quitApp(self): app = QApplication.instance() print("退出整個(gè)程序") app.quit() if __name__ == '__main__': # 創(chuàng)建一個(gè)App實(shí)例 app = QApplication(sys.argv) # 創(chuàng)建一個(gè)主窗口 mainWin = MyWindow() # 使用我們生成的UI窗口實(shí)例 ui = Ui_MainWindow() # 將主窗口傳遞進(jìn)去,讓Ui_MainWindow幫我們向主窗口上放置組件 ui.setupUi(mainWin) # 顯示 mainWin.show() # 主循環(huán) sys.exit(app.exec_())
其中close槽函數(shù),對(duì)應(yīng)主窗口原本的close方法(只是重寫一下打印了一句話)。
quitApp是另一個(gè)槽函數(shù),由另一個(gè)按鈕觸發(fā),同樣可以達(dá)到關(guān)閉窗口的效果(退出整個(gè)程序)。
下面附上自動(dòng)生成的ui3.py的代碼(就兩個(gè)按鈕,關(guān)聯(lián)了兩個(gè)槽函數(shù)):
# -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'ui3.ui' # # Created by: PyQt5 UI code generator 5.14.2 # # WARNING! All changes made in this file will be lost! from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(1264, 886) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(1) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth()) MainWindow.setSizePolicy(sizePolicy) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.pushButton = QtWidgets.QPushButton(self.centralwidget) self.pushButton.setGeometry(QtCore.QRect(120, 130, 75, 23)) self.pushButton.setObjectName("pushButton") self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget) self.pushButton_2.setGeometry(QtCore.QRect(280, 140, 75, 23)) self.pushButton_2.setObjectName("pushButton_2") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 1264, 23)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) self.pushButton.clicked.connect(MainWindow.close) self.pushButton_2.clicked.connect(MainWindow.quitApp) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.pushButton.setText(_translate("MainWindow", "PushButton")) self.pushButton_2.setText(_translate("MainWindow", "PushButton"))
四、窗口坐標(biāo)
通過以下方式可以獲取窗口的坐標(biāo)和尺寸:
# 使用一個(gè)按鈕觸發(fā)該槽函數(shù),用于獲取當(dāng)前窗口的位置和尺寸 def getSizeOfMainWin(self): # 窗口左上角所在坐標(biāo) print(self.x()) # 100 print(self.y()) # 100 # 整個(gè)窗口的寬和高 print(self.width()) # 1264 print(self.height()) # 886 # 可用區(qū)域左上角所在坐標(biāo) print(self.geometry().x()) # 101,說明可用區(qū)域左邊有一個(gè)1px的邊框 print(self.geometry().y()) # 131,說明窗口上面的標(biāo)題欄為31px(包含1px邊框) # 整個(gè)窗口的寬和高,與self.width()、self.height()相同 print(self.geometry().width()) # 1264 print(self.geometry().height()) # 886
五、窗口和應(yīng)用程序坐標(biāo)
有以下兩種方法可以設(shè)置窗口和應(yīng)用程序坐標(biāo)。
需要引入:from PyQt5.QtGui import QIcon
1.使用窗口對(duì)象的setWindowIcon方法
當(dāng)使用窗口的setWindowIcon方法時(shí),在Windows系統(tǒng)下才生效(在MAC中不能生效):
class MyWindow(QMainWindow): def __init__(self): super(MyWindow, self).__init__() self.initUI() def initUI(self): self.setWindowIcon(QIcon("icon.ico"))
效果:
2.使用QApplication實(shí)例的setWindowIcon方法
if __name__ == '__main__': # 創(chuàng)建一個(gè)App實(shí)例 app = QApplication(sys.argv) app.setWindowIcon(QIcon("icon.ico")) # 創(chuàng)建一個(gè)主窗口 mainWin = MyWindow() # 使用我們生成的UI窗口實(shí)例 ui = Ui_MainWindow() # 將主窗口傳遞進(jìn)去,讓Ui_MainWindow幫我們向主窗口上放置組件 ui.setupUi(mainWin) # 顯示 mainWin.show() # 主循環(huán) sys.exit(app.exec_())
這種方式對(duì)于Windows系統(tǒng)和MAC系統(tǒng)都生效。
到此這篇關(guān)于PyQT5 QTDesigner窗口及組成的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)PyQT5 QTDesigner窗口內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Python實(shí)現(xiàn)優(yōu)雅生成假數(shù)據(jù)
Faker是一個(gè)Python包,開源的GITHUB項(xiàng)目,主要用來創(chuàng)建偽數(shù)據(jù),這篇文章主要為大家詳細(xì)介紹了Python如何使用Faker生成假數(shù)據(jù),感興趣的小伙伴可以了解下2023-12-12TensorFlow索引與切片的實(shí)現(xiàn)方法
這篇文章主要介紹了TensorFlow索引與切片的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11簡單幾步教你學(xué)會(huì)Python接口自動(dòng)化測試
這篇文章主要介紹了簡單幾步教你學(xué)會(huì)Python接口自動(dòng)化測試,本文從一個(gè)簡單的登錄接口測試入手,一步步調(diào)整優(yōu)化接口調(diào)用姿勢,期望讀者可以通過本文對(duì)接口自動(dòng)化測試有一個(gè)大致的了解,需要的朋友可以參考下2023-08-08使用fiddler抓包工具Python requests報(bào)錯(cuò):ValueError: check_h
這篇文章主要介紹了使用fiddler抓包工具Python requests報(bào)錯(cuò):ValueError: check_hostname requires server_hostname的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Python正則表達(dá)式實(shí)現(xiàn)截取成對(duì)括號(hào)的方法
這篇文章主要介紹了Python正則表達(dá)式實(shí)現(xiàn)截取成對(duì)括號(hào)的方法,涉及Python正則匹配相關(guān)操作技巧,需要的朋友可以參考下2017-01-01Python求兩個(gè)字符串最長公共子序列代碼實(shí)例
這篇文章主要介紹了Python求兩個(gè)字符串最長公共子序列代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03安裝pyhttpx解決ImportError: DLL load failed錯(cuò)誤
這篇文章主要為大家介紹了安裝pyhttpx解決ImportError: DLL load failed錯(cuò)誤,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08