文章目錄
簡介
本文介紹了部分Pyqt5開發GUI的基礎操作,適合有一定基礎的朋友閱讀,如果您想學習Pyqt圖形界面開發,請 點擊這裏。.
由於本人能力有限,如文章有不足之處歡迎留言指正。
常用weight
名稱 | 簡述 | 使用方法 |
---|---|---|
MainWindow | 主窗口,可以承載menuBar、statusBar和其他Widget | class(MainWindow) |
QLabel | 標籤,起提示作用,可設置信號槽 | label_1 = QLabel(‘我是標籤’) |
QLineEdit | 單行文本輸入框 | lineEdit_1=QLineEdit() |
QTextEdit | 多行文本輸入框 | textEdit_1 = QTextEdit() |
Button | 按鈕,通常和方法綁定,當點擊時可執行對應方法 | QLineEdit() |
QComboBox | 菜單欄 | comboBox_1 = QComboBox() |
基本格式
# 這些模塊建議根據需求使用from *** import ***的形式,因爲打包之後程序會很大
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
class Window(QMainWindow):
def __init__(self):
super(Window,self).__init__()
self.setupUi()
def setupUi(self):
self.setWindowTitle('一個小GUI') # 設置窗口標題
self.resize(769, 336) # 設置窗口大小
if __name__ == '__main__':
app = QApplication(sys.argv) # 創建程序
window = Window() # 創建窗口實例
window.show() # 顯示窗口
sys.exit(app.exec_()) # 安全退出
爲部件設置大小和位置
# 方法一
self.button1 = QPushButton('我是一個小按鈕', self) #注意,不要丟掉self參數,否則屏幕不會顯示按鈕
self.button1.setGeometry(200, 100, 50, 100) # 座標爲x=200,y=100,width=50,height=100
# 方法二
self.button1 = QPushButton('我是一個小按鈕', self)
self.button1.move(200,100) # 座標爲x=200,y=100
self.button1.resize(50, 100) # width=50,height=100
爲按鈕添加單擊事件
# 單個按鈕
self.button1 = QPushButton('我是一個小按鈕', self)
self.button1.setGeometry(200, 100, 50, 100)
self.button1.clicked.connect(onClick_Button) # 點擊時會調用onClick_Button這個方法
def onClick_Button(self):
print("我被點擊了")
# 多個按鈕,可以選擇一個按鈕關聯一個函數的方式,也可以通過判斷按鈕名稱的方式來完成
self.button1 = QPushButton('我是一個按鈕A', self)
self.button1.setGeometry(200, 100, 50, 100)
self.button1.clicked.connect(lambda:self.onClick_Button(self.button1)) # button1是函數的實參
self.button2 = QPushButton('我是一個按鈕B', self)
self.button2.setGeometry(300, 100, 50, 100)
self.button2.clicked.connect(lambda:self.onClick_Button(self.button2)) # button2是函數的實參
def onClick_Button(self,button): # button是傳入的按鈕名稱
buttton_name=button.text()
if buttton_name=='button1':
print("button1被按下了")
else:
print("button2被按下了")
設置菜單選項
self.comboBox1 = QComboBox(self) # 實例化對象,創建一個菜單欄
self.comboBox1.setGeometry(110,40,50,20) # 設置位置和大小
self.comboBox1.setObjectName("第一個菜單欄") # 起一個方便記的名字
self.comboBox1.addItems(["選項一","選項二","選項三"]) # 爲菜單添加選項
'''
或者是使用addItem方法(少了個s):
self.comboBox1.addItem("選項一")
self.comboBox1.addItem("選項二")
self.comboBox1.addItem("選項三")
'''
給佈局添加位置大小和部件
self.groupBox1 = QGroupBox(self) # 實例化對象
self.groupBox1.setGeometry(200, 100, 141, 131) # 設置位置和大小
self.groupBox1.setObjectName("關於Y軸的") # 添加一個方便自己辨別的名字
self.groupBox1.setTitle("Y軸") # 設置標題
self.label1=QLabel("起始")
##########以上代碼是爲了實現佈局的嵌套,當只有佈局不需要嵌套則可以不寫上述代碼和下一行代碼的groupBox1參數##########
self.mainLayout = QGridLayout(self.groupBox1) # 使用柵格化佈局,groupBox1是創建的對象,當參數只有self時,默認在主窗口放置
# self.mainLayout.setGeometry(150, 50, 50, 50) # 設置位置和大小
self.mainLayout.addWidget(self.label1, 0, 0,alignment=Qt.AlignCenter) # 在第一行第一列放置,對齊方式爲水平居中對齊
補充:對齊方式Qt.Alignment可能取值有
名稱 | 對齊方式 |
---|---|
Qt.AlignLeft | 水平居左對齊 |
Qt.AlignRight | 水平居右對齊 |
Qt.AlignCenter | 水平居中對齊 |
Qt.AlignJustify | 水平兩端對齊 |
Qt.AlignTop | 垂直靠上對齊 |
Qt.AlignBottom | 垂直靠下對齊 |
Qt.AlignVCenter | 垂直居中對齊 |
創建一個簡單的水平佈局
import sys
# QToolTip是提示信息的
from PyQt5.QtWidgets import QHBoxLayout,QMainWindow,QApplication,QToolTip,QPushButton,QWidget
from PyQt5.QtGui import QFont
class TooltipForm(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.button1 = QPushButton('我的按鈕')
layout = QHBoxLayout() # 創建一個水平佈局
layout.addWidget(self.button1) # 將button部件添加到水平佈局中
self.setLayout(layout)
####上述代碼已達到目的####
##下面的代碼是介紹怎樣創建一個frame,不感興趣可以不用看##
mainFrame = QWidget() # 在主窗口上再創建一個小窗口
mainFrame.setLayout(layout) # 將水平佈局放到小窗口上
self.setCentralWidget(mainFrame) # 將小窗口放置到主窗口上
if __name__ == '__main__':
app = QApplication(sys.argv)
window = TooltipForm()
window.show()
sys.exit(app.exec_())
爲部件創建提示信息
import sys
# QToolTip是提示信息的
from PyQt5.QtWidgets import QHBoxLayout,QMainWindow,QApplication,QToolTip,QPushButton,QWidget
from PyQt5.QtGui import QFont
class TooltipForm(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
QToolTip.setFont(QFont('Simsun',12))#設置提示信息的字體
QToolTip.setFont(QFont('Simsun',12)) # 設置提示信息的字體
self.setGeometry(300,30,200,300) # 設置窗口的位置和大小
self.setWindowTitle('設置控件提示消息') # 設置窗口的標題
self.setToolTip('今天是星期五') # 把鼠標放到界面停留一會 就會顯示提示信息
# 支持html語法,也可以寫成:self.setToolTip('今天是<b>星期五</b>')
self.button1 = QPushButton('我的按鈕')
self.button1.setToolTip('這是一個按鈕,Are you ok?')
layout = QHBoxLayout()
layout.addWidget(self.button1)
mainFrame = QWidget()
mainFrame.setLayout(layout)
self.setCentralWidget(mainFrame)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = TooltipForm()
window.show()
sys.exit(app.exec_())
設置窗口圖標和應用程序圖標
窗口圖標是打開GUI之後,左上角的圖標,Mac系統沒有這個屬性
應用圖標是打開GUI之後,下面任務欄的圖標
import sys
from PyQt5.QtWidgets import QMainWindow,QApplication
from PyQt5.QtGui import QIcon
class IconForm(QMainWindow):
def __init__(self):
super(IconForm,self).__init__()
self.initUI()
def initUI(self):
self.setGeometry(300,300,250,250)
self.setWindowTitle('設置窗口圖標') # 設置主窗口的標題
self.setWindowIcon(QIcon('./images/Basilisk.ico')) # 設置窗口圖標,參數是圖片地址
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setWindowIcon(QIcon('./images/Dragon.ico')) # 設置應用程序圖標,參數是圖片地址
main = IconForm()
main.show()
sys.exit(app.exec_())