c++ windows 点击按钮跳转另一个窗体_PyQt5学习笔记(一)窗体控制
課程鏈接:PyQt5教程,來自網(wǎng)易云課堂_嗶哩嗶哩 (゜-゜)つロ 干杯~-bilibili?www.bilibili.com此處為23講之后的筆記,之前為Qt Designer可視化開發(fā)的入門教學(xué)
主窗口類型
- QMainWindow:可以包含菜單欄、工具欄、狀態(tài)欄和標(biāo)題欄,是最常見的窗口形式。
- QDialog:是對話窗口的基類。沒有菜單欄、工具欄、狀態(tài)欄。
- QWidget:不確定窗口的用途,就使用QWidget。
下面嘗試用代碼來創(chuàng)建一個QMainWOndow類型的主窗口。
開始一般必須導(dǎo)入的第三方庫:
import sys from PyQt5.QtWidgets import QMainWindow, QApplication from PyQt5.QtGui import QIcon然后定義代表窗口的類,這個類繼承自QMainWindow。
class FirstMainWin(QMainWindow):def __init__(self):# 使用父類的構(gòu)造函數(shù),即初始化列表super(FirstMainWin, self).__init__()# 設(shè)置主窗口的標(biāo)題self.setWindowTitle("第一個主窗口應(yīng)用")# 設(shè)置窗口的尺寸self.resize(400, 300)# 獲得并顯示當(dāng)前的狀態(tài)欄self.status = self.statusBar()# 在狀態(tài)欄上增加一個只顯示5000ms的消息self.status.showMessage("只存在5秒的消息", 5000) ? if __name__ == '__main__':# 獲取系統(tǒng)參數(shù)列表app = QApplication(sys.argv)# 設(shè)置窗口圖標(biāo)app.setWindowIcon(QIcon('./image/pic.ico'))# 創(chuàng)建實(shí)體對象main = FirstMainWin()# 顯示窗體main.show()# 進(jìn)入主循環(huán),安全退出程序sys.exit(app.exec_())運(yùn)行結(jié)果如下:
其中__name__ == '__main__'這個判斷是代表當(dāng)前打開的窗體是否為這個程序的窗體。也就是說只有在當(dāng)前窗口啟動運(yùn)行該程序,才會判對;如果使用import等手段在其他的程序或者窗口調(diào)用運(yùn)行這個程序,則會判錯,后續(xù)的主函數(shù)不會被執(zhí)行。其中__name__代表系統(tǒng)當(dāng)前運(yùn)行的窗口名稱,'__main__'代表這個程序的文件的窗口名稱。
進(jìn)入主函數(shù)后,app = QApplication(sys.argv)和sys.exit(app.exec_())這兩句話是必寫的,具體意思可以在后面慢慢體會。
窗口居中顯示
PyQt5本身沒有讓窗體居中的函數(shù),我們需要自己寫,不過也很簡單。讓窗口顯示只需要獲取系統(tǒng)屏幕大小的參數(shù)和我們的窗口的大小的參數(shù),計(jì)算出窗口左上角的位置。再通過move方法移動至那個位置即可。
主體代碼和上面那個一樣(畢竟上面那個基本就是一個裸的框架)。不過我們需要多import一個子類QDesktopWidget
import sys from PyQt5.QtWidgets import QDesktopWidget, QMainWindow, QApplication from PyQt5.QtGui import QIcon ? class CenterForm(QMainWindow):def __init__(self):# 使用父類的構(gòu)造函數(shù),即初始化列表super(CenterForm, self).__init__() ?# 設(shè)置主窗口的標(biāo)題self.setWindowTitle("窗口居中") ?# 設(shè)置窗口的尺寸self.resize(400, 300) ?# 調(diào)用center方法self.center() ?def center(self):# 得到屏幕的尺寸screen = QDesktopWidget().screenGeometry() ?# 獲取窗口尺寸size = self.geometry() ?# 計(jì)算居中窗口的左上角到屏幕左側(cè)坐標(biāo)的距離newLeft = (screen.width() - size.width()) / 2 ?# 計(jì)算居中窗口的左上角到屏幕上邊坐標(biāo)的距離newTop = (screen.height() - size.height()) / 2 ?# 移動窗口, 因?yàn)閙ove方法只接受整數(shù),所以我們類型轉(zhuǎn)換一下self.move(int(newLeft), int(newTop)) ? ? if __name__ == '__main__':# 獲取系統(tǒng)參數(shù)列表app = QApplication(sys.argv) ?# 創(chuàng)建實(shí)體對象main = CenterForm() ?# 顯示窗體main.show() ?# 進(jìn)入主循環(huán),安全退出程序sys.exit(app.exec_())此處用到了move()方法,這個方法對坐標(biāo)系的建立和turtle庫很像,它移動的對象是窗口的左上角。第一個參數(shù)代表移動后的窗口,左上角離屏幕左側(cè)的距離;第二個參數(shù)代表移動后的窗口左上角離屏幕上方的距離。
其實(shí)windows系統(tǒng)下,我們的窗口默認(rèn)是居中的退出應(yīng)用程序
之前可以在Qt Designer中通過將button的click()信號和close()槽函數(shù)關(guān)聯(lián)來達(dá)到,只要點(diǎn)擊button就可以直接退出程序。此處我們換一種思路,嘗試通過Python代碼來實(shí)現(xiàn),退出應(yīng)用程序。
import sys from PyQt5.QtWidgets import QHBoxLayout, QMainWindow, QApplication, QPushButton, QWidget ? class QuitApplication(QMainWindow):def __init__(self):super(QuitApplication, self).__init__()self.resize(300, 120)self.setWindowTitle("退出應(yīng)用程序") ?# 添加Buttonself.button1 = QPushButton("退出應(yīng)用程序") ?# 將信號與槽關(guān)聯(lián)self.button1.clicked.connect(self.onClick_Button) ?# 創(chuàng)建水平布局layout = QHBoxLayout()layout.addWidget(self.button1) ?mainFrame = QWidget()mainFrame.setLayout(layout) ?self.setCentralWidget(mainFrame) ?# 按鈕單機(jī)事件的方法(自定義的槽)def onClick_Button(self):print("按鈕被按下")app = QApplication.instance() ?# 退出應(yīng)用程序app.quit() ? if __name__ == '__main__':app = QApplication(sys.argv)main = QuitApplication()main.show()sys.exit(app.exec_())運(yùn)行結(jié)果:
點(diǎn)擊便退出設(shè)置窗口和應(yīng)用程序圖標(biāo)
import ... ? class IconForm(QMainWindow):def __init__(self):super(IconForm, self).__init__()self.initUI() ?def initUI(self):self.setWindowTitle("設(shè)置窗口圖標(biāo)")self.resize(400, 300) ?# 設(shè)置窗口圖標(biāo)self.setWindowIcon(QIcon("./image/pic.ico")) ? ? if __name__ == '__main__':app = QApplication(sys.argv)main = IconForm()main.show()sys.exit(app.exec_())運(yùn)行結(jié)果:
這個結(jié)果與操作系統(tǒng)有關(guān),在windows環(huán)境下,結(jié)果如圖所示,這個方法只能設(shè)置窗口圖標(biāo);在Mac環(huán)境下,這個方法只顯示了應(yīng)用程序的圖標(biāo)(就是任務(wù)欄上的那個啟動的程序的圖標(biāo))。
所以這個方法只在windows中湊效。
顯示控件的提示信息
什么叫控件的提示信息呢?每當(dāng)我們將光標(biāo)移動到一個按鈕或者一個程序時,過一小會兒,光標(biāo)會顯示出一個小白框來顯示這個按鈕或者這個程序的名稱或更多信息。
import sys from PyQt5.QtWidgets import QHBoxLayout, QMainWindow, QApplication, QToolTip, QPushButton, QWidget from PyQt5.QtGui import QFont ? class ToolTipForm(QMainWindow):def __init__(self):super(ToolTipForm, self).__init__()self.initUI() ?def initUI(self):# 設(shè)置字體及其大小QToolTip.setFont(QFont("SanSerif", 12)) ?# 設(shè)置當(dāng)前對象即窗口的提示信息,給“星期五”加一個代表加粗的HTML標(biāo)簽self.setToolTip("今天是<b>星期五</b>") ?# 設(shè)置窗口大小,四個參數(shù)代表x,y,width,height,相當(dāng)于move和resize兩個函數(shù)的作用self.setGeometry(300, 300, 300, 300)self.setWindowTitle("設(shè)置控件提示信息") ?# 創(chuàng)建并設(shè)置按鈕的提示信息self.button1 = QPushButton("我的按鈕")self.button1.setToolTip("這是一個按鈕")layout = QHBoxLayout()layout.addWidget(self.button1) ?mainFrame = QWidget()mainFrame.setLayout(layout) ?self.setCentralWidget(mainFrame) ? ? if __name__ == '__main__':app = QApplication(sys.argv)main = ToolTipForm()main.show()sys.exit(app.exec_())運(yùn)行結(jié)果
超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生總結(jié)
以上是生活随笔為你收集整理的c++ windows 点击按钮跳转另一个窗体_PyQt5学习笔记(一)窗体控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python爬虫导入数据库_python
- 下一篇: kubectl 创建pvc_k8s的持久