因為之前個契機而開始使用 PySide , 不然以前在學時用 Python 寫 UI 時都是用 Tkinter。
剛開始接觸 PySide 被那一大堆的 Singal 跟 Slot 功能驚豔到, 很想所有東西都玩過一遍, 但可惜時間不允許, 透過這次想嘗試看看我之前沒有接觸到或者想嘗試但是沒人用的功能~
Python 版本為: 3.10
PySide 版本為: PySide6
學程式一定都免不了第一步驟, Hello World!
這次我們要在 GUI 上顯示 Hello World!
官方其實有範例, 但畢竟是要"玩" PySide 的功能因此我先普通的印出 Hello World!
from PySide6 import QtCore, QtWidgets
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.hello = "Hello, world!"
self.text = QtWidgets.QLabel("Hello World",
alignment=QtCore.Qt.AlignCenter)
self.layout = QtWidgets.QVBoxLayout(self)
self.layout.addWidget(self.text)
if __name__ == "__main__":
app = QtWidgets.QApplication([])
widget = MyWidget()
widget.resize(300, 300)
widget.show()
sys.exit(app.exec())
在 main 裡先將我們要的視窗大小定義出來, 這裡先設定為(300, 300), 文字是以 QLabel 的方式呈現, QLabel 的 alignment 參數可以設定對其方式, 其他對其方式請參考官網
class 按照上方寫之後會有以下成果
只有文字看起來很單調, 那我們來加個按鈕吧!
讓文字可以出現又消失
import sys
from PySide6 import QtCore, QtWidgets
class MyWidget(QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.hello = "Hello, world!"
self.isShow = True
self.button = QtWidgets.QPushButton("Click")
self.text = QtWidgets.QLabel("Hello World",
alignment=QtCore.Qt.AlignCenter)
self.layout = QtWidgets.QVBoxLayout(self)
self.layout.addWidget(self.text)
self.layout.addWidget(self.button)
self.button.clicked.connect(self.magic)
@QtCore.Slot()
def magic(self):
if(self.isShow):
self.text.hide()
self.isShow = False
else:
self.text.show()
self.isShow = True
if __name__ == "__main__":
app = QtWidgets.QApplication([])
widget = MyWidget()
widget.resize(300, 300)
widget.show()
sys.exit(app.exec())
這次我們設定一個QPushButton, 使用者按了之後會呼叫 magic 這個函式, 還有一個 bool 參數來控制是否要讓文字顯現在畫面上.
show() 跟 hide() 是 Pyside 裡幾乎任何元件都可以呼叫的函示, 其功能就如字面上所表示的, 顯示跟隱藏
而上方程式碼執行後可以得到如下
magic 這個函式上方可以看到我一開頭所說的讓我驚艷到的其中之一 @Slot()
但 Pyside 中 Singal 跟 Slot 是最最最根本也是使用 Pyside 做 GUI 最重要的東西。
明天繼續深入了解那些讓我一開始接觸就驚艷到的 Singal 跟 Slot 吧