基礎窗口控件QWidget是所有用戶界面對象的基類,所有的窗口和控件都直接或間接的繼承QWidget
窗口座標系統
1.屏幕座標系統:以屏幕左上角爲座標原點,從左到右爲x軸正向,從上到下爲y軸正向,用來定位頂層窗口
2.窗口內部座標系統:座標原點爲窗口左上角,原點,x軸,y軸圍成的區域叫做Client Area(客戶區),客戶區周圍的是標題欄與邊框
具體操作函數如下
- QWidget 直接提供的成員函數:x(),y()獲取窗口左上角的座標,width(),height()獲取客戶區的高度和寬度
- QWidget中的geometry()提供的成員函數:x(),y()獲取客戶區左上角的座標,width(),height()獲取客戶區的高度和寬度
- QWidget中的frameGeometry()提供的成員函數:x(),y()獲取窗口左上角的座標,width(),height()獲取整個窗口(包含客戶區,標題欄和邊框)的高度和寬度
一些常見函數
import sys
from PyQt5.QtWidgets import QApplication , QMainWindow,QWidget
from functiontest import Ui_Form
class MyMainWindow(QMainWindow,Ui_Form):
def __init__(self, parent=None):
super(MyMainWindow,self).__init__(parent)
self.setupUi(self)
self.getClient()
#客戶區操作
def getClient(self):
a=self.size()#獲取客戶區大小
x=self.width()#獲取客戶區寬度
y=self.height()#獲取客戶區高度
print("大小:"+str(a)+" 寬度:"+str(x)+" 高度: "+str(y))
def changeClient(self,x,y,width,height):
self.resize(width,heighet)#改變客戶區寬度和高度
self.setFixedHeight(height)#寬度固定,只可改變高度
self.setFixedWidth(width)#高度固定,只可改變寬度
self.setGeometry(x,y,width,height)#改變客戶區的位置和大小,不可單獨設置x,y,座標
#self.setGeometry(Qrect rect)
self.getClient()
#整個窗口的操作
def Window(self,x,y):
self.frameGeometry()#獲得整個窗口的大小和位置
self.move(x,y)#設置窗口的位置
#self.move(QPoint point)
self.pos()#獲得窗口左上角的座標
print(self.frameGeometry())
if __name__=="__main__":
app = QApplication(sys.argv)
myWin = MyMainWindow()
#myWin.changeClient(200,300,400,600)
myWin.Window(400,300)
myWin.show()
sys.exit(app.exec_())
pyqt5實例
面向過程建立一個窗口
# -*- coding: UTF-8 -*-
import sys
from PyQt5.QtWidgets import QApplication , QMainWindow,QWidget
app=QApplication(sys.argv)
window=QWidget()
window.resize(300,200)
window.move(250,150)
window.setWindowTitle('hello')
window.show()
sys.exit(app.exec_())
解釋:
-
-- coding: UTF-8 -- 這裏是爲了解決中文會出現的亂碼問題,utf-8又稱爲萬國碼。使用該方案可以幫助其他語言的正常顯示。
- app=QApplication(sys.argv),每一個pyqt5程序都需要一個QApplication對象,sys.argv,s是一個命令行參數列表。python腳本可以從shell中執行,比如單擊.py腳本文件,通過命令行選擇執行腳本的方式
- Qwidget控件是所有用戶界面的基類,此處並沒有繼承其他類,通常把沒有父類的控件稱爲窗口。當控件被當作窗口處理時,setWindowTitle,與setWindowIcon會生效
- window.show():將窗口控件顯示在屏幕上
- sys.exit(app.exec_())最後進入主循環,事件處理從本行代碼開始,主循環接受信息並將其分發給程序的幾個控件。如果調用exit(),h或主控件被銷燬,主循環就會結束,sys.exit()方法可以確保程序完整的結束
面向對象建立一個窗口,併爲應用程序設置一個圖標
# -*- coding: UTF-8 -*-
import sys
from PyQt5.QtWidgets import QApplication , QMainWindow,QWidget
from PyQt5.QtGui import QIcon
class Icon(QWidget):
def __init__(self,parent=None):
super(Icon,self).__init__(parent)
self.initUI()
def initUI(self):
self.setGeometry(300,300,700,900)
self.setWindowTitle('程序')
self.setWindowIcon(QIcon('./cartoon1.ico'))
if __name__=='__main__':
app=QApplication(sys.argv)
icon=Icon()
icon.show()
sys.exit(app.exec_())
我們一般使用setWindowIcon()方法來設置程序座標,需要一個QIcon類型的對象作爲參數,在使用QIcon類構造函數時 ,需要提供圖標路徑。(區分之間文章中窗口內部加載圖像的方法)
顯示氣泡提示
對於一些操作,相關信息的提示就顯得非常有用,因此我們需要在這些地方添加氣泡提示。
# -*- coding: UTF-8 -*-
import sys
from PyQt5.QtWidgets import QApplication , QToolTip,QWidget
from PyQt5.QtGui import QFont,QIcon
class Winform(QWidget):
def __init__(self,parent=None):
super(Winform,self).__init__(parent)
self.initUI()
def initUI(self):
QToolTip.setFont(QFont('華文中宋', 10))#設置氣泡的字體和大小,可不加
self.setToolTip('這是一個<b>氣泡提示</b>')#設置氣泡提示
self.setGeometry(200,300,400,400)
self.setWindowTitle('氣泡提示')
self.setWindowIcon(QIcon('./cartoon1.ico'))
if __name__=='__main__':
app=QApplication(sys.argv)
win=Winform()
win.show()
sys.exit(app.exec_())