0

ユーザーの選択に応じて、最終的にいくつかのデータ分析のいずれかを実行する GUI に取り組んでいます。GUI のこの部分には、オプション付きの 4 つのラジオ ボタンと、表示ボタンがあります。ユーザーがディスプレイにアクセスしたときに、インポートされた 4 つの関数のいずれかを実行したいと思います。

それはこのようなものに要約されます

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信号に接続する必要はありません。

代わりに、ユーザーはラジオ ボタン (同じ親内で自動的に排他的) を選択でき、表示ボタンがクリックされた時点で、どのラジオ ボタンが選択されているか (最大で 1 つ) を読み取り、実行します。どちらが選択されるかによるもの。

4 つのラジオ ボタンの場合は、ボタンのif else節でそれを行うことができisChecked()ます。

ボタンの数が多い場合は、メソッド内の各ボタンに整数を割り当て、選択したボタンの整数を で簡単に取得できるQButtonGroup(ドキュメント) を追加で使用することをお勧めします。ボタンが選択されていない場合、戻り値は -1 です。addButton()checkedId()

私の例(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 に答える