摘要:控件是一個用戶界面的基本控件,它提供了基本的應(yīng)用構(gòu)造器。默認情況下,構(gòu)造器是沒有父級的,沒有父級的構(gòu)造器被稱為窗口。這就意味著,我們調(diào)用了兩個構(gòu)造器,一個是這個類本身的,一個是這個類繼承的。構(gòu)造器方法返回父級的對象。
本章學習Qt的基本功能 例1,簡單的窗口
這個簡單的小例子展示的是一個小窗口。但是我們可以在這個小窗口上面做很多事情,改變大小,最大化,最小化等,這需要很多代碼才能實現(xiàn)。這在很多應(yīng)用中很常見,沒必要每次都要重寫這部分代碼,Qt已經(jīng)提供了這些功能。PyQt5是一個高級的工具集合,相比使用低級的工具,能省略上百行代碼。
#!/usr/bin/python3 # -*- coding: utf-8 -*- """ ZetCode PyQt5 tutorial In this example, we create a simple window in PyQt5. author: Jan Bodnar website: zetcode.com Last edited: August 2017 """ import sys from PyQt5.QtWidgets import QApplication, QWidget if __name__ == "__main__": app = QApplication(sys.argv) w = QWidget() w.resize(250, 150) w.move(300, 300) w.setWindowTitle("Simple") w.show() sys.exit(app.exec_())
運行上面的代碼,能展示出一個小窗口。
import sys from PyQt5.QtWidgets import QApplication, QWidget
這里引入了PyQt5.QtWidgets模塊,這個模塊包含了基本的組件。
app = QApplication(sys.argv)
每個PyQt5應(yīng)用都必須創(chuàng)建一個應(yīng)用對象。sys.argv是一組命令行參數(shù)的列表。Python可以在shell里運行,這個參數(shù)提供對腳本控制的功能。
w = QWidget()
QWidge控件是一個用戶界面的基本控件,它提供了基本的應(yīng)用構(gòu)造器。默認情況下,構(gòu)造器是沒有父級的,沒有父級的構(gòu)造器被稱為窗口(window)。
w.resize(250, 150)
resize()方法能改變控件的大小,這里的意思是窗口寬250px,高150px。
w.move(300, 300)
move()是修改控件位置的的方法。它把控件放置到屏幕坐標的(300, 300)的位置。注:屏幕坐標系的原點是屏幕的左上角。
w.setWindowTitle("Simple")
我們給這個窗口添加了一個標題,標題在標題欄展示(雖然這看起來是一句廢話,但是后面還有各種欄,還是要注意一下,多了就蒙了)。
w.show()
show()能讓控件在桌面上顯示出來。控件在內(nèi)存里創(chuàng)建,之后才能在顯示器上顯示出來。
sys.exit(app.exec_())
最后,我們進入了應(yīng)用的主循環(huán)中,事件處理器這個時候開始工作。主循環(huán)從窗口上接收事件,并把事件傳入到派發(fā)到應(yīng)用控件里。當調(diào)用exit()方法或直接銷毀主控件時,主循環(huán)就會結(jié)束。sys.exit()方法能確保主循環(huán)安全退出。外部環(huán)境能通知主控件怎么結(jié)束。
exec_()之所以有個下劃線,是因為exec是一個Python的關(guān)鍵字。
程序預(yù)覽:
窗口圖標通常是顯示在窗口的左上角,標題欄的最左邊。下面的例子就是怎么用PyQt5創(chuàng)建一個這樣的窗口。
在某些環(huán)境下,圖標顯示不出來。如果你遇到了這個問題,看我在Stackoverfolw的回答
#!/usr/bin/python3 # -*- coding: utf-8 -*- """ ZetCode PyQt5 tutorial This example shows an icon in the titlebar of the window. Author: Jan Bodnar Website: zetcode.com Last edited: August 2017 """ import sys from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtGui import QIcon class 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() if __name__ == "__main__": app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
前一個例子是使用的過程式編程。Python還支持面向?qū)ο蟮木幊蹋?/p>
class Example(QWidget): def __init__(self): super().__init__() ...
面向?qū)ο缶幊套钪匾娜齻€部分是類(class)、數(shù)據(jù)和方法。我們創(chuàng)建了一個類的調(diào)用,這個類繼承自QWidget。這就意味著,我們調(diào)用了兩個構(gòu)造器,一個是這個類本身的,一個是這個類繼承的。super()構(gòu)造器方法返回父級的對象。__init__()方法是構(gòu)造器的一個方法。
self.initUI()
使用initUI()方法創(chuàng)建一個GUI。
# 自己準備一個web.png self.setGeometry(300, 300, 300, 220) self.setWindowTitle("Icon") self.setWindowIcon(QIcon("web.png"))
上面的三個方法都繼承自QWidget類。setGeometry()有兩個作用:把窗口放到屏幕上并且設(shè)置窗口大小。參數(shù)分別代表屏幕坐標的x、y和窗口大小的寬、高。也就是說這個方法是resize()和move()的合體。最后一個方法是添加了圖標。先創(chuàng)建一個QIcon對象,然后接受一個路徑作為參數(shù)顯示圖標。
if __name__ == "__main__": app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
應(yīng)用和示例的對象創(chuàng)立,主循環(huán)開始。
程序預(yù)覽:
例3,提示框#!/usr/bin/python3 # -*- coding: utf-8 -*- """ ZetCode PyQt5 tutorial This example shows a tooltip on a window and a button. Author: Jan Bodnar Website: zetcode.com Last edited: August 2017 """ import sys from PyQt5.QtWidgets import (QWidget, QToolTip, QPushButton, QApplication) from PyQt5.QtGui import QFont class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): QToolTip.setFont(QFont("SansSerif", 10)) self.setToolTip("This is a QWidget widget") btn = QPushButton("Button", self) btn.setToolTip("This is a QPushButton widget") btn.resize(btn.sizeHint()) btn.move(50, 50) self.setGeometry(300, 300, 300, 200) self.setWindowTitle("Tooltips") self.show() if __name__ == "__main__": app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
在這個例子中,我們?yōu)閼?yīng)用創(chuàng)建了一個提示框。
QToolTip.setFont(QFont("SansSerif", 10))
這個靜態(tài)方法設(shè)置了提示框的字體,我們使用了10px的SansSerif字體。
self.setToolTip("This is a QWidget widget")
調(diào)用setTooltip()創(chuàng)建提示框可以使用富文本格式的內(nèi)容。
btn = QPushButton("Button", self) btn.setToolTip("This is a QPushButton widget")
創(chuàng)建一個按鈕,并且為按鈕添加了一個提示框。
btn.resize(btn.sizeHint()) btn.move(50, 50)
調(diào)整按鈕大小,并讓按鈕在屏幕上顯示出來,sizeHint()方法提供了一個默認的按鈕大小。
程序預(yù)覽:
例4,關(guān)閉窗口關(guān)閉一個窗口最直觀的方式就是點擊標題欄的那個叉,這個例子里,我們展示的是如何用程序關(guān)閉一個窗口。這里我們將接觸到一點single和slots的知識。
本例使用的是QPushButton組件類。
QPushButton(string text, QWidget parent = None)
text參數(shù)是想要顯示的按鈕名稱,parent參數(shù)是放在按鈕上的組件,在我們的 例子里,這個參數(shù)是QWidget。應(yīng)用中的組件都是一層一層(繼承而來的?)的,在這個層里,大部分的組件都有自己的父級,沒有父級的組件,是頂級的窗口。
#!/usr/bin/python3 # -*- coding: utf-8 -*- """ ZetCode PyQt5 tutorial This program creates a quit button. When we press the button, the application terminates. Author: Jan Bodnar Website: zetcode.com Last edited: August 2017 """ import sys from PyQt5.QtWidgets import QWidget, QPushButton, QApplication from PyQt5.QtCore import QCoreApplication class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): qbtn = QPushButton("Quit", self) qbtn.clicked.connect(QCoreApplication.instance().quit) qbtn.resize(qbtn.sizeHint()) qbtn.move(50, 50) self.setGeometry(300, 300, 250, 150) self.setWindowTitle("Quit button") self.show() if __name__ == "__main__": app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
這里創(chuàng)建了一個點擊之后就退出窗口的按鈕。
from PyQt5.QtCore import QCoreApplication
程序需要QtCore對象。
qbtn = QPushButton("Quit", self)
創(chuàng)建一個繼承自QPushButton的按鈕。第一個參數(shù)是按鈕的文本,第二個參數(shù)是按鈕的父級組件,這個例子中,父級組件就是我們創(chuàng)建的繼承自Qwidget的Example類。
qbtn.clicked.connect(QCoreApplication.instance().quit)
事件傳遞系統(tǒng)在PyQt5內(nèi)建的single和slot機制里面。點擊按鈕之后,信號會被捕捉并給出既定的反應(yīng)。QCoreApplication包含了事件的主循環(huán),它能添加和刪除所有的事件,instance()創(chuàng)建了一個它的實例。QCoreApplication是在QApplication里創(chuàng)建的。 點擊事件和能終止進程并退出應(yīng)用的quit函數(shù)綁定在了一起。在發(fā)送者和接受者之間建立了通訊,發(fā)送者就是按鈕,接受者就是應(yīng)用對象。
程序預(yù)覽:
例5,消息盒子默認情況下,我們點擊標題欄的×按鈕,QWidget就會關(guān)閉。但是有時候,我們修改默認行為。比如,如果我們打開的是一個文本編輯器,并且做了一些修改,我們就會想在關(guān)閉按鈕的時候讓用戶進一步確認操作。
#!/usr/bin/python3 # -*- coding: utf-8 -*- """ ZetCode PyQt5 tutorial This program shows a confirmation message box when we click on the close button of the application window. Author: Jan Bodnar Website: zetcode.com Last edited: August 2017 """ import sys from PyQt5.QtWidgets import QWidget, QMessageBox, QApplication class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setGeometry(300, 300, 250, 150) self.setWindowTitle("Message box") self.show() def closeEvent(self, event): reply = QMessageBox.question(self, "Message", "Are you sure to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No) if reply == QMessageBox.Yes: event.accept() else: event.ignore() if __name__ == "__main__": app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
如果關(guān)閉QWidget,就會產(chǎn)生一個QCloseEvent。改變控件的默認行為,就是替換掉默認的事件處理。
reply = QMessageBox.question(self, "Message", "Are you sure to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
我們創(chuàng)建了一個消息框,上面有倆按鈕:Yes和No.第一個字符串顯示在消息框的標題欄,第二個字符串顯示在對話框,第三個參數(shù)是消息框的倆按鈕,最后一個參數(shù)是默認按鈕,這個按鈕是默認選中的。返回值在變量reply里。
if reply == QtGui.QMessageBox.Yes: event.accept() else: event.ignore()
這里判斷返回值,如果點擊的是Yes按鈕,我們就關(guān)閉組件和應(yīng)用,否者就忽略關(guān)閉事件。
程序預(yù)覽:
例6,窗口居中#!/usr/bin/python3 # -*- coding: utf-8 -*- """ ZetCode PyQt5 tutorial This program centers a window on the screen. Author: Jan Bodnar Website: zetcode.com Last edited: August 2017 """ import sys from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.resize(250, 150) self.center() self.setWindowTitle("Center") self.show() def center(self): qr = self.frameGeometry() cp = QDesktopWidget().availableGeometry().center() qr.moveCenter(cp) self.move(qr.topLeft()) if __name__ == "__main__": app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_())
QtGui.QDesktopWidget提供了用戶的桌面信息,包括屏幕的大小。
self.center()
這個方法是調(diào)用我們下面寫的,實現(xiàn)對話框居中的方法。
qr = self.frameGeometry()
得到了主窗口的大小。
cp = QDesktopWidget().availableGeometry().center()
獲取顯示器的分辨率,然后得到中間點的位置。
qr.moveCenter(cp)
然后把自己窗口的中心點放置到qr的中心點。
self.move(qr.topLeft())
然后把窗口的坐上角的坐標設(shè)置為qr的矩形左上角的坐標,這樣就把窗口居中了。
程序預(yù)覽:
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/42961.html
摘要:庫是目前最強大的庫之一。是一組命令行參數(shù)的列表。可以在里運行,這個參數(shù)提供對腳本控制的功能。默認情況下,構(gòu)造器是沒有父級的,沒有父級的構(gòu)造器被稱為窗口。主循環(huán)從窗口上接收事件,并把事件傳入到派發(fā)到應(yīng)用控件里。方法能確保主循環(huán)安全退出。 showImg(https://segmentfault.com/img/remote/1460000018695864?w=1134&h=722); ...
摘要:坐標軸,標題,標簽,圖形樣式餅圖,柱狀圖,折線圖等等等的設(shè)置都通過的成員函數(shù)來設(shè)置完成。寫在最后因為自身能力有限,也不是科班出身,都是自學的,目前還是一名學生,所以有未盡之處還請指正,不喜勿噴。 在pyqt5中使用matplotlib 前言 雖然,qt中也提供了繪圖函數(shù),但對于初學者并不是很容易掌握,眾所周知,matplot提供了簡單,易用,強大的繪圖函數(shù),結(jié)合mumpy基本可以達到m...
摘要:將程序包裝在界面里,可以將輸入通過多種途徑如文本框彈出路徑選擇等輸入到程序里。將輸出通過文本框顯示出來將執(zhí)行信息如如報錯信息運行進度通過文本框或進度條顯示出來文章安排先介紹安裝和配合的使用。 作為一個程序的開發(fā)者,我們僅僅需要在相應(yīng)路徑通過命令行就可執(zhí)行那個程序。但是,不懂行的人不理解這個黑框框的東西,陌生領(lǐng)域任何人都沒有安全感,所以他們是拒絕接受一個項目僅僅只是通過一個黑框框來執(zhí)行的...
摘要:之前在舊電腦折騰了一陣子開發(fā),目前用了一臺新的機器,安裝過程簡單記錄下,也供小伙伴參考準備工作版本系統(tǒng)準備以下三個文件文件可以到這里下載鏈接安裝步驟安裝這個沒什么好說的,點擊即可,安裝結(jié)束之后,修改了配置安裝解壓 之前在舊電腦折騰了一陣子 pyqt 開發(fā),目前用了一臺新的機器,安裝 pyqt 過程簡單記錄下,也供小伙伴參考 1 準備工作 python 版本: Python 2.7.1...
摘要:可以脫離語言環(huán)境獨立運行就像一本英文書,我找一個翻譯,給他點時間,把英文書翻譯成中文的,這就是編譯型語言解釋型語言有良好的平臺兼容性,在任何環(huán)境中都可以運行,前提是安裝了解釋器虛擬機。就像還是一本英文書,我看一句讓他給我解釋一句。 寫在前面 隨著大數(shù)據(jù)、人工智能這類詞匯撲向我們,python這個早在1989就已經(jīng)出現(xiàn)的語言終于高調(diào)回歸,為了更好的學習python 我們先來了解下它的前世...
閱讀 3999·2021-11-18 13:22
閱讀 1824·2021-11-17 09:33
閱讀 2883·2021-09-26 09:46
閱讀 1216·2021-08-21 14:11
閱讀 2894·2019-08-30 15:53
閱讀 2711·2019-08-30 15:52
閱讀 1898·2019-08-30 10:52
閱讀 1522·2019-08-29 15:30