pyside6常用代码片段
pyside6初始化
from PySide6.QtWidgets import QWidget, QApplication, QPushButton, QHBoxLayout, QGroupBox
import Ui_uis
class MyMainWindow(QWidget):
def __init__(self):
super().__init__()
# 初始化 UI
self.ui = Ui_uis.Ui_Form()
self.ui.setupUi(self)
if __name__ == "__main__":
app = QApplication([])
mainWindow = MyMainWindow()
mainWindow.show()
app.exec()
自定义信号槽MySignals
from PySide6.QtCore import QObject, Signal
class signalDefinition(QObject): # 只有继承自QObject的类才可以定义信号
signal_none = Signal() # 无参数的信号
signal_int = Signal(int) # 带整数参数的信号
signal_float = Signal(float) # 带浮点数参数的信号
signal_str = Signal(str) # 带字符串参数的信号
signal_list = Signal(list) # 带列表参数的信号
signal_dict = Signal(dict) # 带字典参数的信号
signal_int_float_str = Signal(int, float, str) # 带整数、浮点数、字符串参数的信号
signal_r2 = Signal((int,), (str,)) # 创建重载型信号,相当于创建了2个信号
signal_r3 = Signal(
(
int,
str,
),
(str,),
(list,),
) # 创建重载型信号,相当于创建了3个信号
signal_r = Signal((), (bool)) # 创建重载型信号,一个不带参数,另一个带布尔型参数
def __init__(self, parent=None):
super().__init__(parent)
self.signal_none.connect(self.slot_none) # 信号与槽的连接
self.signal_list.connect(self.slot_list)
self.signal_r2[int].connect(
self.slot_signal_r2_1
) # overload型信号的第一个信号可以不指定类型
self.signal_r2[str].connect(
self.slot_signal_r2_2
) # overload型信号的第一个信号可以不指定类型
self.signal_none.emit() # 发送信号
self.signal_list.emit([1, 2, 3, 4])
self.signal_r2[int].emit(1000)
self.signal_r2[str].emit("信号重载Str")
def slot_none(self): # 自定义槽函数
print("slot_none emit")
def slot_list(self, list):
for i in list:
print(i)
def slot_signal_r2_1(self, v: int):
print(v)
def slot_signal_r2_2(self, s: str):
print(s)
signalDefinition()
子线程运行
from PySide6.QtWidgets import QWidget, QApplication
from PySide6.QtCore import QObject, Signal, QThread, QRunnable, Slot, QThreadPool
from pyside_xxxx import Ui_Form
class _Task(QRunnable): # 小推车
def __init__(self, fn, *a, **k):
super().__init__() # 初始化小车
self.fn = fn # 把函数放进去
self.a = a # 把位置参数放进去
self.k = k # 把关键字参数放进去
@Slot()
def run(self): # 线程会调用这个函数
self.fn(*self.a, **self.k) # 真正执行函数
_pool = QThreadPool.globalInstance()
def in_thread(fn, *a, **k):
task = _Task(fn, *a, **k) # 把函数和参数装进小车
_pool.start(task) # 把小车推进线程池,自动跑
class MyMainWindow(QWidget):
def __init__(self):
super().__init__()
# 初始化 UI
self.ui = Ui_Form()
self.ui.setupUi(self)
def click_bt_按钮槽函数(self):
def q():
pass # 耗时任务
in_thread(q) # 在新线程中执行翻译操作
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果