QT教程4:基本窗口实现
一、PyQt5 簡單案例
????????這是一個顯示小窗口的簡單示例。然而,我們可以用這個窗口做很多事情。我們可以調整它的大小、最大化或最小化它。這需要大量的編碼。有人已經編寫了這個功能。因為它在大多數應用程序中都是重復的,所以不需要重新編碼。 PyQt5 是一個高級工具包。如果我們在較低級別的工具包中編碼,下面的代碼示例很容易有數百行。
simple.py
#!/usr/bin/python""" ZetCode PyQt5 tutorialIn this example, we create a simple window in PyQt5.Author: Jan Bodnar Website: zetcode.com """import sys from PyQt5.QtWidgets import QApplication, QWidgetdef main():app = QApplication(sys.argv)w = QWidget()w.resize(250, 150)w.move(300, 300)w.setWindowTitle('Simple')w.show()sys.exit(app.exec_())if __name__ == '__main__':main()上面的代碼示例在屏幕上顯示了一個小窗口。
import sys
from PyQt5.QtWidgets import QApplication, QWidget
在這里,我們提供必要的導入。基本小部件位于? in?PyQt5.QtWidgets?模塊內
每個 PyQt5 應用程序都必須創建一個應用程序對象。 sys.argv 參數是來自命令行的參數列表。 Python 腳本可以從 shell 運行。這是我們控制腳本啟動的一種方式。
w = QWidget()QWidget 小部件是 PyQt5 中所有用戶界面對象的基類。我們為 QWidget 提供默認構造函數。默認構造函數沒有父級。沒有父級的小部件稱為窗口。
w.resize(250, 150)resize 方法調整小部件的大小。它寬 250 像素,高 150 像素。
w.move(300, 300)move 方法將小部件移動到屏幕上 x=300, y=300 坐標處的位置。
w.setWindowTitle('Simple')我們使用 setWindowTitle 設置窗口的標題。標題顯示在標題欄中。
w.show()show 方法在屏幕上顯示小部件。小部件首先在內存中創建,然后顯示在屏幕上。
sys.exit(app.exec_())最后,我們進入應用程序的主循環。事件處理從這一點開始。主循環從窗口系統接收事件并將它們分派給應用程序小部件。如果我們調用 exit 方法或主小部件被銷毀,則主循環結束。 sys.exit 方法確保干凈的退出。環境將被告知應用程序是如何結束的。
exec_ 方法有一個下劃線。這是因為 exec 是 Python 關鍵字。因此,使用了 exec_。
Figure: Simple
二、為應用加圖標
應用程序圖標是一個小圖像,通常顯示在標題欄的左上角。在下面的示例中,我們將展示如何在 PyQt5 中執行此操作。我們還將介紹一些新方法。
某些環境不會在標題欄中顯示圖標。我們需要啟用它們。如果您沒有看到任何圖標,請參閱我在 Stackoverflow 上的答案以獲取解決方案。
icon.py
#!/usr/bin/python""" ZetCode PyQt5 tutorialThis example shows an icon in the titlebar of the window.Author: Jan Bodnar Website: zetcode.com """import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QIconclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):self.setGeometry(300, 300, 300, 220)self.setWindowTitle('Icon')self.setWindowIcon(QIcon('web.png'))self.show()def main():app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())if __name__ == '__main__':main()前面的示例以程序樣式進行編碼。 Python 編程語言支持過程和面向對象的編程風格。在 PyQt5 中編程意味著在 OOP 中編程。
class Example(QWidget):def __init__(self):super().__init__()...面向對象編程中的三件事是類、數據和方法。在這里,我們創建了一個名為“示例”的新類。 Example 類繼承自 QWidget 類。這意味著我們調用了兩個構造函數:第一個用于示例類,第二個用于繼承類。 super 方法返回 Example 類的父對象,我們調用它的構造函數。 __init__ 方法是 Python 語言中的構造方法。
self.initUI()GUI 的創建委托給 initUI 方法。
self.setGeometry(300, 300, 300, 220) self.setWindowTitle('Icon') self.setWindowIcon(QIcon('web.png'))這三個方法都繼承自 QWidget 類。 setGeometry 做了兩件事:它在屏幕上定位窗口并設置它的大小。前兩個參數是窗口的 x 和 y 位置。第三個是寬度,第四個是窗口的高度。事實上,它將調整大小和移動方法結合在一種方法中。最后一個方法設置應用程序圖標。為此,我們創建了一個 QIcon 對象。 QIcon 接收到要顯示的圖標的路徑。
def main():app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())創建應用程序和示例對象。主循環開始。
Figure: Icon
三、在 PyQt5 中顯示工具提示
我們可以為我們的任何小部件提供氣球幫助。
tooltip.py
#!/usr/bin/python""" ZetCode PyQt5 tutorialThis example shows a tooltip on a window and a button.Author: Jan Bodnar Website: zetcode.com """import sys from PyQt5.QtWidgets import (QWidget, QToolTip,QPushButton, QApplication) from PyQt5.QtGui import QFontclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):QToolTip.setFont(QFont('SansSerif', 10))self.setToolTip('This is a <b>QWidget</b> widget')btn = QPushButton('Button', self)btn.setToolTip('This is a <b>QPushButton</b> widget')btn.resize(btn.sizeHint())btn.move(50, 50)self.setGeometry(300, 300, 300, 200)self.setWindowTitle('Tooltips')self.show()def main():app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())if __name__ == '__main__':main()在這個例子中,我們展示了兩個 PyQt5 小部件的工具提示。
QToolTip.setFont(QFont('SansSerif', 10))此靜態方法設置用于呈現工具提示的字體。我們使用 10pt SansSerif 字體。
self.setToolTip('This is a <b>QWidget</b> widget')要創建工具提示,我們調用 setTooltip 方法。我們可以使用富文本格式。
btn = QPushButton('Button', self) btn.setToolTip('This is a <b>QPushButton</b> widget')我們創建一個按鈕小部件并為其設置工具提示。
btn.resize(btn.sizeHint()) btn.move(50, 50)按鈕正在調整大小并在窗口上移動。 sizeHint 方法為按鈕提供了推薦的大小。
Figure: Tooltips
四、關閉窗口
關閉窗口的明顯方法是單擊標題欄上的 x 標記。在下一個示例中,我們將展示如何以編程方式關閉窗口。我們將簡要介紹信號和插槽。 以下是我們在示例中使用的 QPushButton 小部件的構造函數。
QPushButton(string text, QWidget parent = None)文本參數是將顯示在按鈕上的文本。父級是我們放置按鈕的小部件。在我們的例子中,它將是一個 QWidget。應用程序的小部件形成層次結構。在這個層次結構中,大多數小部件都有它們的父級。沒有父級的小部件是頂級窗口。
quit_button.py
#!/usr/bin/python""" ZetCode PyQt5 tutorialThis program creates a quit button. When we press the button, the application terminates.Author: Jan Bodnar Website: zetcode.com """import sys from PyQt5.QtWidgets import QWidget, QPushButton, QApplicationclass Example(QWidget):def __init__(self):super().__init__()self.initUI()def initUI(self):qbtn = QPushButton('Quit', self)qbtn.clicked.connect(QApplication.instance().quit)qbtn.resize(qbtn.sizeHint())qbtn.move(50, 50)self.setGeometry(300, 300, 350, 250)self.setWindowTitle('Quit button')self.show()def main():app = QApplication(sys.argv)ex = Example()sys.exit(app.exec_())if __name__ == '__main__':main()在本例中,我們創建了一個退出按鈕。單擊按鈕后,應用程序終止。
qbtn = QPushButton('Quit', self)我們創建一個按鈕。該按鈕是 QPushButton 類的一個實例。構造函數的第一個參數是按鈕的標簽。第二個參數是父部件。父小部件是示例小部件,它是繼承的 QWidget。
qbtn.clicked.connect(QApplication.instance().quit)The event processing system in PyQt5 is built with the signal & slot mechanism. If we click on the button, the signal?clicked?is emitted. The slot can be a Qt slot or any Python callable.
PyQt5 中的事件處理系統是使用信號槽機制構建的。如果我們點擊按鈕,就會發出點擊的信號。插槽可以是 Qt 插槽或任何 Python 可調用的。
使用 QApplication.instance 檢索的 QCoreApplication,內包含主事件循環——它處理和調度所有事件。 clicked 信號連接到終止應用程序的退出方法。通信是在兩個對象之間完成的:發送者和接收者。發送者是按鈕,接收者是應用對象。
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Figure: Quit button
總結
以上是生活随笔為你收集整理的QT教程4:基本窗口实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python知识:QT5的move应用
- 下一篇: s3c2440移植MQTT