新聞中心
這篇文章給大家介紹怎么理解基礎(chǔ)窗口控件QWidget,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供長子網(wǎng)站建設(shè)、長子做網(wǎng)站、長子網(wǎng)站設(shè)計、長子網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、長子企業(yè)網(wǎng)站模板建站服務(wù),十余年長子做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。
?? 本來這一篇是想寫一下怎么使用Qt Designer去設(shè)計一個界面的,但是我現(xiàn)在通常都是用代碼去直接寫界面很少用設(shè)計器。因為Qt Designer并不是為了python而寫的,所以用起來不是很方便。很多初學者可能都比較喜歡使用Qt Designer,因為所見即所得,我以前做MFC開發(fā)的時候也是一直用界面設(shè)計器,主要是VS的功能非常強大,而且界面設(shè)計和代碼編寫都是使用這個IDE,契合非常完美。但是Qt Designer就一樣了。另外一點就是因為你對PyQt5的布局管理器的使用不熟悉,如果你學會了布局管理器的使用,那這些控件的布局其實非常簡單。他并不是你所想象的用代碼去按像素調(diào)整窗口,PyQt5的布局管理器是根據(jù)左右布局、上下布局或者柵格布局自動幫你調(diào)整到對應(yīng)的位置,你只需要進行一些微調(diào)就可以了。我們在網(wǎng)上搜到的很多代碼都是直接去設(shè)置控件的絕對位置,這樣就誤導(dǎo)了很多人。PyQt5的布局管理器是非常好用的,它可以幫我們把大概的布局很簡單的就設(shè)計好。所以后期我的教程會盡量使用布局管理器。同時在使用的地方也會加上一些注釋,這樣大家代碼看得多了以后就會對布局管理器有一些了解。
QWidget
?? 一個程序可以擁有多個窗口,每個窗口都會承載多個控件。所有的窗口和控件都是直接或者間接的繼承自QWidget類。
窗口坐標系統(tǒng)
??就像大多數(shù)GUI系統(tǒng)一樣,PyQt5使用的坐標系統(tǒng)也是以左上角為原點(0, 0)。
import sys
from PyQt5.QtWidgets import QApplication, QWidget
app = QApplication(sys.argv)
widget = QWidget()
widget.setGeometry(300, 300, 500, 500)
widget.setWindowTitle("我是主窗口控件")
w1 = QWidget(widget)
w1.setGeometry(100, 100, 200, 200)
w1.setWindowTitle("我是子控件")
w1.setStyleSheet("background-color:blue")
widget.show()
sys.exit(app.exec_())

對于獨立的頂層窗口,它的X、Y坐標是針對整個屏幕的,也就是說widget控件設(shè)置的300,300是在屏幕上的偏移位置。對于子控件,它的X、Y坐標是針對其父控件的,w1控件設(shè)置的100,100是針對widget控件的,在整個屏幕上就是400,400位置。X坐標從上往下一次遞增,值越大越靠近屏幕下方,Y坐標從左往右依次遞增,值越大越靠近屏幕右方。在PyQt5中獲取控件位置有以下三種方式:
QWidget直接提供的成員函數(shù):x(), y()獲得窗口左上角的坐標,width(), height()獲取窗口的寬度和高度。
QWidget的geometry()提供的成員函數(shù):x(),y()獲取窗口左上角坐標,width(), height()獲取窗口的寬度和高度。
QWidget的frameGeometry()提供的成員函數(shù):x(),y()獲取窗口左上角坐標,width(), height()獲取窗口的寬度和高度。
常用的幾何結(jié)構(gòu)
QWidget有兩種幾何結(jié)構(gòu)。
不包含外邊框。
包含外邊框。
對于主窗口控件,不包含邊框的部分就是客戶區(qū),我們可以在其中添加子控件。
不包含外邊框
客戶區(qū)的大小是一個QRect類。要改變窗口的大小,可以使用如下函數(shù):
修改窗口大小
QWidget.resize(width, height)
Qwidget.resize(QSize)
2.獲取窗口大小
QWidget.size()
3.獲取窗口的寬和高
QWidget.width()
QWidget.height()
4.設(shè)置窗口的高度和寬度
QWidget.setFixedWidth(width)
QWidget.setFixedHeight(height)
QWidget.setFixedSize(QSize)
QWidget.setFixedSize(width, height)
設(shè)置固定寬度和高度,設(shè)置以后,窗口的大小不能改變。
QWidget.setGeometry(x, y, width, height)
QWidget.setGeometry(QRect)
同時設(shè)置窗口的位置和大小
包含外邊框
QWidget包含邊框是窗口在整個屏幕上顯示的整個區(qū)域。
獲取窗口的位置和大小
QWidget.frameGeometry()
2.設(shè)置窗口的位置
QWidget.move(x, y)
QWidget.move(QPoint)
3.獲得窗口左上角坐標
QWidget.pos()
下面再來一個例子結(jié)束今天的文章:
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton
if __name__ == "__main__":
app = QApplication(sys.argv)
main_widget = QWidget()
main_widget.setWindowTitle("我是主窗口控件")
# 相當于main_widget.setGeometry(300, 300, 500, 500)
main_widget.resize(500, 500)
main_widget.move(300, 300)
# QPushButton(main_widget)的意思是將btn作為main_widget的子控件,這樣在移動位置時才會以父控件為參照
btn = QPushButton(main_widget)
btn.setText("我是按鈕")
btn.setFixedSize(100, 30)
btn.move(100, 100)
# 打印一下位置信息
print("main_widget")
print("x=%d, y=%d" % (main_widget.x(), main_widget.y()))
print("width=%d, height=%d" % (main_widget.width(), main_widget.height()))
print("geometry")
print("x=%d, y=%d" % (main_widget.geometry().x(), main_widget.geometry().y()))
print("width=%d, height=%d" % (main_widget.geometry().width(), main_widget.geometry().height()))
print("frameGeometry")
print("x=%d, y=%d" % (main_widget.frameGeometry().x(), main_widget.frameGeometry().y()))
print("width=%d, height=%d" % (main_widget.frameGeometry().width(), main_widget.frameGeometry().height()))
main_widget.show()
sys.exit(app.exec_())


關(guān)于怎么理解基礎(chǔ)窗口控件QWidget就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
分享文章:怎么理解基礎(chǔ)窗口控件QWidget
文章網(wǎng)址:http://fisionsoft.com.cn/article/gshocj.html