Python GUI教程(二):添加窗口小部件到圖形用戶界面GUI中
文章首發:Python GUI教程(二):添加窗口小部件到圖形用戶界面GUI中
上一篇中,我們創建的GUI程序只有一個空空的窗口,在這一篇中,我們:
- 添加一個狀態欄小部件到GUI中;
- 添加一個菜單欄到GUI中;
- 綁定一個事件到一個菜單按鈕來實現關閉窗口。
一、面向對象化
前面的例子中,我們使用的是面向函數的編程方式。Python支持面對函數和面向對象兩種編程方式,在PyQt5中,使用面向對象的編程方式更加符合其特點。所以接下來我們使用面對對象的編程方式來創建GUI程序。
我們先將上一篇的例子,改造為面對對象的形式:
# coding:utf-8nimport sysnfrom PyQt5.QtWidgets import QApplication,QWidgetnnclass GUi():n def __init__(self):n self.initUI()nn def initUI(self):n self.win = QWidget()n self.win.setWindowTitle(州的先生Zmister.com GUI教程)nnif __name__ == __main__:n app = QApplication(sys.argv)n gui = GUi()n gui.win.show()n sys.exit(app.exec_())n
在這裡,我們創建了一個名為GUi的類,通過initUI()方法來創建窗口,並在初始化方法init()中調用它。
運行程序,如下GUI窗口:
二、在類中繼承
除了使用原生的類,我們還能從pyqt5中繼承一些模塊,以此來獲得相關模塊的屬性。比如,我們創建一個繼承於QWidget()的類,那麼它就擁有了QWidget()的方法和屬性,這樣我們就可以不實例化一個QWidget()對象而直接擁有QWidget()的屬性:
# coding:utf-8nimport sysnfrom PyQt5.QtWidgets import QApplication,QWidgetnn# 繼承自QWidgetnclass GUi(QWidget):n def __init__(self):n # 實例化super類,用來創建窗口n super().__init__()n self.initUI()nn def initUI(self):n self.setWindowTitle(州的先生Zmister.com GUI教程)nnif __name__ == __main__:n app = QApplication(sys.argv)n gui = GUi()n gui.show()n sys.exit(app.exec_())n
除了QtWidgets 模塊擁有窗口的一些屬性,QMainWindow模塊也擁有窗口的一眾屬性,我們同樣也可以通過繼承它來為創建的類獲得窗口屬性:
# coding:utf-8nimport sysnfrom PyQt5.QtWidgets import QApplication,QMainWindownnclass GUi(QMainWindow):n def __init__(self):n super().__init__()n self.initUI()nn def initUI(self):n self.setWindowTitle(州的先生Zmister.com GUI教程)n self.resize(400,100)nnif __name__ == __main__:n app = QApplication(sys.argv)n gui = GUi()n gui.show()n sys.exit(app.exec_())n
運行程序,得到下面的GUI:
下面,我們就通過QMainWindow,來為GUI添加更多的小部件。
三、添加狀態欄
我們可以通過QMainWindow的statusBar()方法來設置GUI窗口底部的狀態消息欄。
# coding:utf-8nimport sysnfrom PyQt5.QtWidgets import QMainWindow,QApplicationnnclass GUI(QMainWindow):n def __init__(self):n super().__init__()n self.iniUI()n def iniUI(self):n self.setWindowTitle("州的先生Zmister.com Python GUI教程")n self.resize(400,300)n n # 設置狀態消息欄文本n self.statusBar().showMessage("文本狀態欄")nnif __name__ == __main__:n app = QApplication(sys.argv)n gui = GUI()n gui.show()n sys.exit(app.exec_())n
運行程序,結果如下:
四、添加菜單欄
同時,我們可以使用QMainWindow的statusBar()方法來在窗口中添加一個菜單欄:
# coding:utf-8nimport sysnfrom PyQt5.QtWidgets import QApplication,QMainWindow,QActionnnclass GUI(QMainWindow):n def __init__(self):n super().__init__()n self.iniUI()nn def iniUI(self):n self.setWindowTitle("州的先生zmister.com PythonGUI教程")n self.statusBar().showMessage("文本狀態欄")n self.resize(400, 300)nn # 創建一個菜單欄n menu = self.menuBar()n # 創建一個菜單n file_menu = menu.addMenu("文件")nn # 創建一個行為n new_action = QAction(新文件,self)n # 添加一個行為到菜單n file_menu.addAction(new_action)nn # 更新狀態欄文本n new_action.setStatusTip(新的文件)nnif __name__ == __main__:n app = QApplication(sys.argv)n gui = GUI()n gui.show()n sys.exit(app.exec_())n
在這個程序中,我們在上一個程序的基礎上,使用menuBar()方法創建了一個菜單欄,同時在菜單欄中添加了一個「文件」菜單;在這個基礎上,通過QAction模塊創建了一個行為new_action,在「文件」菜單中添加了這個行為。這個行為的動作就是設置狀態欄的文本,運行程序,結果如下:
接下來,我們添加一個「修改」菜單按鈕,再添加一個退出行為,用於後面進行退出關閉窗口:
# coding:utf-8nimport sysnfrom PyQt5.QtWidgets import QApplication,QMainWindow,QActionnnclass GUI(QMainWindow):n def __init__(self):n super().__init__()n self.iniUI()nn def iniUI(self):n self.setWindowTitle("州的先生zmister.com PythonGUI教程")n self.statusBar().showMessage("文本狀態欄")n self.resize(400, 300)nn # 創建一個菜單欄n menu = self.menuBar()n # 創建兩個個菜單n file_menu = menu.addMenu("文件")n file_menu.addSeparator()n edit_menu = menu.addMenu(修改)nn # 創建一個行為n new_action = QAction(新的文件,self)n # 更新狀態欄文本n new_action.setStatusTip(打開新的文件)n # 添加一個行為到菜單n file_menu.addAction(new_action)nn # 創建退出行為n exit_action = QAction(退出,self)n # 退出操作n exit_action.setStatusTip("點擊退出應用程序")n # 點擊關閉程序n exit_action.triggered.connect(self.close)n # 設置退出快捷鍵n exit_action.setShortcut(Ctrl+Q)n # 添加退出行為到菜單上n file_menu.addAction(exit_action)nnif __name__ == __main__:n app = QApplication(sys.argv)n gui = GUI()n gui.show()n sys.exit(app.exec_())n
我們像創建第一個菜單那樣創建了第二個菜單「修改」菜單,然後創建了一個「退出」行為,重點看一下它的代碼:
# 創建退出行為n exit_action = QAction(退出,self)n# 退出操作nexit_action.setStatusTip("點擊退出應用程序")n# 點擊關閉程序nexit_action.triggered.connect(self.close)n# 設置退出快捷鍵nexit_action.setShortcut(Ctrl+Q)n# 添加退出行為到菜單上nfile_menu.addAction(exit_action)n
首先使用QAction()對象創建一個行為,然後使用setStatusTip()方法設置他的狀態文本提示,接著使用triggered.connect()方法調用關閉窗口的介面,再使用setShortcut()方法設置了行為的快捷鍵,最後添加行為到菜單上。
推薦閱讀: