PyQT - 从其他函数修改主窗口小部件

2 投票
1 回答
1251 浏览
提问于 2025-04-16 17:46

这是一个关于PyQT初学者的问题。我想知道怎么做类似下面的事情——从主窗口类外部修改主窗口里的控件。就像这样:

class MainWindow(QtGui.QMainWindow):    

    def __init__(self, parent=None):

        super(MainWindow,self).__init__(parent)

        self.ui = Ui_MainWindow()        
        self.ui.setupUi(self)

        self.ui.progressBar.setMaximum(100)
        self.ui.progressBar.setMinimum(0)
        self.ui.progressBar.setValue(0)

        self.connect(self.ui.pushButton, QtCore.SIGNAL('clicked()'), self.slotDoStuff)

    def slotDoStuff(self):
        AnotherFunction()


def AnotherFunction():    
    modify progress bar here...

有没有办法做到这一点呢?我想为主窗口的各种操作事件处理程序创建子类,而不想把它们都放在MainWindow类里。谢谢!

1 个回答

4

首先,有一种更好的方法可以在PyQt中连接信号和槽:

self.button.clicked.connect(self.method)

你可以使用lambda函数来给方法传递额外的参数。

def do_stuff(arg)
     #do stuff with arg

然后你可以调用

self.button1.clicked.connect(lambda : do_stuff('btn one'))
self.button2.clicked.connect(lambda : do_stuff('btn two'))

你可以传递任何你想要的东西,包括你想要修改的主窗口实例。

撰写回答