QWidget

2022-09-22 08:46:51 字數 4378 閱讀 6777

基礎視窗控制元件qwidget類是所有使用者介面物件的基類,所有的視窗和控制元件都是直接或間接繼承自qwidget類。

視窗控制元件(widget,簡稱“控制元件”)是在pyqt中建立介面的主要元素。在pyqt中把沒有嵌入到其他控制元件中的控制元件稱為視窗,一般視窗都有邊框、標題欄。視窗是指程式的整體介面,可以包含標題欄、選單欄、工具欄、關閉按鈕、最小化按鈕、最大化按鈕等;控制元件是指按鈕、核取方塊、文字框、**、進度條等這些組成程式的基本元素。一個程式可以有多個視窗,一個視窗也可以有多個控制元件。

pyqt使用統一的座標系統來定位視窗控制元件的位置和大小。具體的座標系統如下圖所示。

以螢幕左上角為原點,即(0, 0)點,從左向右為x軸正向,從上向下為y軸正向,整個螢幕的座標系統就用來定位定位頂層視窗的。

此外,在視窗內部也有自己的座標系統,該座標系統仍然以左上角為原點,從左向右為x軸正向,從上向下為y軸正向,原點、x軸、y軸圍成的區域叫作client area(客戶區),在客戶區的周圍則是標題欄(window title)和邊框(frame)。

下圖所示是qt提供的分析qwidget幾何結構的一張圖。

從上圖可以看出,成員函式分為三類。

qwidget直接提供的成員函式:x()、y()獲得視窗左上角的座標,width()、height()獲得客戶區的寬度和高度。

qwidget的geometry()提供的成員函式:x()、y()獲得客戶區左上角的座標,width()、height()獲得客戶區的寬度和高度。

qwidget的framegeometry()提供的成員函式:x()、y()獲得客戶區左上角的座標,width()、height()獲得包含客戶區、標題欄和邊框在內的整個視窗的寬度和高度。

qwidget不包含邊框的常用函式

1)改變客戶區的面積

qwidget.resize(width, height)

qwidget.resize(qsize)

2)獲得客戶區的大小

qwidget.size()
3)獲得客戶區的寬度和高度

qwidget.width()

qwidget.height()

4)設定客戶區的寬度和高度

qwidget.setfixedwidth(int width)
使用這個函式,客戶區的高度是固定的,不可以改變,只可以改變寬度。

qwidget.setfixedheight(int height)
這時候寬度就是固定的,不可以改變,但是可以改變高度

qwidget.setfixedsize(qsize size)

qwidget.setfixedsize(int width, int height)

通過上面這兩個函式,高度和寬度都是固定的,不可以通過滑鼠來改變視窗的寬度和高度。如果要同時改變客戶區的大小和位置,需要用到以下函式。

qwidget.setgeometry(int x, int y, int width, int height)

qwidget.setgeometry(qrect rect)

x 和 y 對應的就是 x 和 y 座標。可以不單獨設定x 和 y 座標。

qwidget包含邊框的常用函式

1)獲得視窗的大小和位置

qwidget.framegeometry()
2)設定視窗的位置

qwidget.move(int x, int y)

qwidget.move(qpoint point)

3)獲得視窗左上角的座標

qwidget.pos()
案例4  螢幕座標系統顯示

import

sysfrom pyqt5.qtwidgets import

widget =qwidget()

btn =qpushbutton(widget)

btn.settext(

"button")

btn.move(20, 20)

widget.resize(300, 200)

widget.move(250, 200)

widget.setwindowtitle(

"pyqt 座標系統例子")

widget.show()

print("

qwidget:")

print("

w.x() = %d

" %widget.x())

print("

w.y() = %d

" %widget.y())

print("

w.width() = %d

" %widget.width())

print("

w.height() = %d

" %widget.height())

print("

qwidget.geometry")

print("

w.geometry().x() = %d

" %widget.geometry().x())

print("

w.geometry().y() = %d

" %widget.geometry().y())

print("

w.geometry().width() = %d

" %widget.geometry().width())

print("

w.geometry().height() = %d

" %widget.geometry().height())

案例5  建立一個主視窗

import

sysfrom pyqt5.qtwidgets import

window =qwidget()

window.resize(300, 200)

window.move(250, 150)

window.setwindowtitle(

"hello pyqt5")

window.show()

案例6  設定程式圖示

import

sysfrom pyqt5.qtgui import

qicon

from pyqt5.qtwidgets import

#建立一個名為icon的視窗類,繼承自qwidget類

class

icon(qwidget):

def__init__(self, parent=none):

super().

__init__

(parent)

self.initui()

#初始化視窗

definitui(self):

self.setgeometry(300, 300, 250, 150)

self.setwindowtitle(

"程式圖示")

self.setwindowicon(qicon(

"./cartool1.ico"))

if__name__ == "

__main__":

icon =icon()

icon.show()

案例7  顯示提示資訊

import

sysfrom pyqt5.qtgui import

qfont

from pyqt5.qtwidgets import

class

winform(qwidget):

def__init__

(self):

super().

__init__

() self.initui()

#初始化視窗

definitui(self):

qtooltip.setfont(qfont(

"sansserif

", 10))

self.settooltip(

"這是一個氣泡提示"

) self.setgeometry(200, 300, 400, 400)

self.setwindowtitle(

"氣泡提示 demo")

if__name__ == "

__main__":

win =winform()

win.show()

顯示dll裡的QWidget

1 新建庫 c 庫 2 命名 此處為mydll 並選擇共享庫 下一步 下一步 3 選擇所需要的模組 有使用到的都選上 此處勾選前三項qtco...