0

我正在开发一个 GUI,它最终将根据用户选择运行几个数据分析之一。在 GUI 的这一部分,我有四个带有选项的单选按钮,然后是一个显示按钮。我希望在用户点击显示时运行四个导入的函数之一。

它归结为这样的事情

import myFunction

class myUi(QtGui.QWidget):
    def retranslateUi(self, myUi):
        self.option1.clicked.connect(self.option1task)
        self.option2.clicked.connect(self.option2task)
        self.display.clicked.connect(self.displaytask)

    def option1task(self):
        #do something

    def option2task(self):
        #do something

    def displaytask(self):
        #if option 1 was clicked, run myFunction.option1()
        #if option 2 was clicked, run myFunction.option2()

我只是很难让它工作。有什么方法可以通过传递变量来解决它,还是我需要使用信号/插槽方法?

4

1 回答 1

1

首先,您不想在单击单选按钮时立即做出反应,因此您不需要连接到他们的clicked信号。

相反,用户可以选择单选按钮(在同一父项中自动独占),并且在单击显示按钮时,您只需读出选择了哪个单选按钮(最多可以是一个)并执行根据哪一个被选择的东西。

对于四个单选按钮,您可以通过按钮if else上的子句来isChecked()实现。

对于较大数量的按钮,我建议另外使用一个QButtonGroup文档),它允许为方法中的每个按钮分配一个整数addButton(),然后使用 轻松检索所选按钮的整数checkedId()。如果未选择任何按钮,则返回值为 -1。

我的示例(使用与 PyQt 非常相似的 PySide):

from PySide import QtGui

def do_something():
    id = g.checkedId()
    if id == -1:
        print('no option selected')
    else:
        print('selected option {}, read for display'.format(id))

app = QtGui.QApplication([])

w = QtGui.QWidget()
l = QtGui.QVBoxLayout(w)

# three radio buttons
b1 = QtGui.QRadioButton('Option 1')
l.addWidget(b1)
b2 = QtGui.QRadioButton('Option 2')
l.addWidget(b2)
b3 = QtGui.QRadioButton('Option 3')
l.addWidget(b3)

# a button group (mapping from buttons to integers)
g = QtGui.QButtonGroup(w)
g.addButton(b1, 1)
g.addButton(b2, 2)
g.addButton(b3, 3)

# display button
b = QtGui.QPushButton('Display')
b.clicked.connect(do_something)
l.addWidget(b)

w.show()

app.exec_()

它看起来像:

在此处输入图像描述

于 2015-02-13T09:00:37.283 回答