好友
阅读权限25
听众
最后登录1970-1-1
|
本帖最后由 Cool_Breeze 于 2021-8-13 16:08 编辑
更新一个错误 signal 初始化参数问题 如下:
signal = Signal([int, define], [str, int], [list, dict])
槽函数签名如下:
slot(int, define)
slot(str, int)
slot(list, dict)
[Python] 纯文本查看 复制代码 # -*- coding : utf-8 -*-
from PySide2.QtWidgets import QApplication,QLabel,QTextEdit,QSplitter,QFrame,QPushButton, QWidget, QMessageBox, QFileDialog,QMainWindow,QHBoxLayout, QVBoxLayout, QGridLayout, QFormLayout
from PySide2.QtCore import Qt, Signal, QSize
import sys
class define(object):
# 自定义信号类型
# 需要提前定义
def __init__(self, obj = None):
self.p = 100
self.obj = obj
class WindowMain(QWidget):
# *** 注意实例对象不能再添加信号 ***
# WindowMain 实例不能再添加信号
# 一个参数,三种类型
intSignal = Signal([int], [str], [define])
# 两个参数,两种类型
# signal = Signal([int, define], [str, int])
# 槽函数
# slot(int, define)
# slot(str, int)
def __init__(self):
super().__init__()
self.resize(800, 600)
self.setWindowTitle("手动布局(splitter)")
hbox = QHBoxLayout(self)
topleft = QFrame()
topleft.setFrameShape(QFrame.StyledPanel)
bottom = QFrame()
bottom.setFrameShape(QFrame.StyledPanel)
splitter1 = QSplitter(Qt.Horizontal) # 水平布局
self.textedit = QTextEdit()
self.strLabel = QLabel()
splitter1.addWidget(topleft)
splitter1.addWidget(self.textedit)
splitter1.addWidget(self.strLabel)
splitter1.setSizes([100, 200, 130]) # 各个控件的大小
splitter2 = QSplitter(Qt.Vertical) # 竖立布局
splitter2.addWidget(splitter1)
splitter2.addWidget(bottom)
intb = QPushButton("int")
strb = QPushButton("str")
defineb = QPushButton("define")
splitter2.addWidget(strb)
splitter2.addWidget(defineb)
hbox.addWidget(splitter2)
hbox.addWidget(intb)
self.setLayout(hbox)
# 自定义信号连接不同的槽
# intSignal[int] 返回信号对象 可以理解成字典 {key: 对象}
self.intSignal[int].connect(self.intParmeterSlot)
self.intSignal[str].connect(self.strParmeterSlot)
self.intSignal[define].connect(self.defineParmeterSlot)
# 按键内置信号连接不同的槽
intb.clicked.connect(self.intButClicked)
strb.clicked.connect(self.strButClicked)
defineb.clicked.connect(self.defineButClicked)
# 触发
def intButClicked(self):
self.intSignal[int].emit(1) # 可以理解成字典 {key: 对象}
def strButClicked(self):
self.intSignal[str].emit("str")
def defineButClicked(self):
self.intSignal[define].emit(define(self.intSignal[define])) # 实例化 define 类
# 槽函数
def intParmeterSlot(self, a):
self.textedit.setText(str(type(a)))
self.strLabel.setText(str(type(a)))
def strParmeterSlot(self, a):
self.strLabel.setText(str(type(a)))
self.textedit.setText(str(type(a)))
def defineParmeterSlot(self, d):
self.textedit.setText(f"class = {str(type(d))}\ndefine.p = {d.p} \ndefine.obj = {d.obj}")
self.strLabel.setText(f"class = {str(type(d))}\ndefine.p = {d.p} \ndefine.obj = {d.obj}")
# 开始运行
app = QApplication(sys.argv)
winMain = WindowMain()
winMain.show()
app.exec_() |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|