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