从不同的小部件捕获信号

2024-09-30 12:23:54 发布

您现在位置:Python中文网/ 问答频道 /正文

如果我的头衔被取消了,我提前道歉了。我的工具中有一堆小部件,如果用户对它们进行了更改,我会尝试让信号运行一个额外的方法,主要是QLineEdits和QSliders

我使用Qt设计器创建了它们,它们的信号在main.py中设置,滑块/线编辑的方法基本相同:

class MyUI(QtGui.QWidget):
    def __init__(self, parent=None, dockable=True):
        super(MyUI, self).__init__(parent=parent)
        # calling from my converted .ui file
        self.ui = Ui_MyTool()
        self.ui.setupUi(self)

        self._connect_signals()

    def _connect_signals(self):
        self.ui.posXSlider.valueChanged.connect(self.pos_x_slider)
        self.ui.posYSlider.valueChanged.connect(self.pos_y_slider)
        self.ui.posZSlider.valueChanged.connect(self.pos_z_slider)
        self.ui.transparencySlider.valueChanged.connect(self.transparency_slider)

        self.ui.posXLineEdit.editingFinished.connect(self.pos_x_edit)
        self.ui.posYLineEdit.editingFinished.connect(self.pos_y_edit)
        self.ui.posZLineEdit.editingFinished.connect(self.pos_z_edit)
        self.ui.transparencyLineEdit.editingFinished.connect(self.transparency_edit)

    def pos_x_slider(self, value):
        value /= 100.0
        self.posXLineEdit.setText(str(value))

        self.run_this_extra_method()

    def pos_x_edit(self):
        value = float(self.ui.posXLineEdit.text())
        self.ui.posXSlider.setValue(float(value) * 100.0)

        self.run_this_extra_method()

    def run_this_extra_method(self):
        # doing some other stuff

如您所见,我在slider和line edit方法中都调用了run_this_extra_method,并且看到我有4个slider+4行编辑,这将产生8个调用/行run_this_extra_method

有没有什么方法可以让我“整理”/“捕获”或某种方式,这样每当用户对这些小部件进行任何更改时,我就可以调用run_this_extra_method一次


Tags: 方法runposselfuivaluedefconnect
1条回答
网友
1楼 · 发布于 2024-09-30 12:23:54

试试看:

main.py

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

from uiMyTool import Ui_MyTool

class MyUI(QtWidgets.QWidget):
    def __init__(self, parent=None, dockable=True):
        super(MyUI, self).__init__(parent=parent)
        # calling from my converted .ui file
        self.ui = Ui_MyTool()
        self.ui.setupUi(self)

        self._connect_signals()

        self.flag_of_extra_method = False                                          # +++

    def _connect_signals(self):
        self.ui.positionXHorizontalSlider.valueChanged.connect(self.pos_x_slider)
        self.ui.positionXLineEdit.editingFinished.connect(self.pos_x_edit)

    def pos_x_slider(self, value):
        value /= 100.0
        self.ui.positionXLineEdit.setText(str(value))

        if not self.flag_of_extra_method:                                         # +++
            self.run_this_extra_method()                                          # +++
        self.flag_of_extra_method = not self.flag_of_extra_method                 # +++

    def pos_x_edit(self):
        value = float(self.ui.positionXLineEdit.text())
        self.ui.positionXHorizontalSlider.setValue(float(value) * 100.0)

        if not self.flag_of_extra_method:                                         # +++
            self.run_this_extra_method()                                          # +++
        self.flag_of_extra_method = not self.flag_of_extra_method                 # +++    


    def run_this_extra_method(self):
        if not self.flag_of_extra_method:                                         # +++
            # doing some other stuff
            print("run_this_extra_method")


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    window = MyUI()
    window.show()
    sys.exit(app.exec_())        

enter image description here

相关问题 更多 >

    热门问题