2017-10-04 6 views
0

のラジオボタンのうち、class Bのボタンを押してチェックを外したいとします。他のクラスのすべてのラジオボタンをオフにする方法

私の例のコードは以下の通りです:

import sys, os 

import PyQt4 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

class Widget1(QWidget): 
    def __init__(self, bridge, parent=None): 
     super().__init__() 

     self.bridge = bridge 

     self.grid = QGridLayout() 

     self.radiobtn = QRadioButton() 
     self.grid.addWidget(self.radiobtn, 0, 0) 

class Widget2(QWidget): 

    def __init__(self, parent = None): 
     super().__init__() 

     self.grid = QGridLayout() 

     self.pushbtn = QPushButton() 
     self.grid.addWidget(self.pushbtn,0, 0) 

class Tab1Layout(QWidget): 
    def __init__(self, parent = None): 
     super().__init__() 
     self.grid = QGridLayout() 

     self.group2 = Widget2() 

     self.group1 = Widget1(self.group2, self) 

     self.grid.addWidget(self.group1, 0, 0) 
     self.grid.addWidget(self.group2, 1, 0) 


class Tabs(QTabWidget): 
    def __init__(self, parent = None): 
     super().__init__() 
     self.tab1 = Tab1Layout() 
     self.addTab(self.tab1, 'Tab1') 

     self.show() 

def main(): 
    app = QApplication(sys.argv) 
    main = Tabs() 
    main.show() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

私のコードは今あるとして、それは二つの問題ました:

  1. ラジオボタンとプッシュボタンが

  2. まで表示されません。
  3. ラジオボタンとプッシュボタンが最終的に表示されるとします。Widget2のプッシュボタンをクリックすると、のラジオボタンが表示されます0が既にチェックされている場合はチェックを外す必要があります。

私はすでにWidget1に第二引数bridgeを置くことによってWidget1Widget2をリンクしていますのでご注意ください。私がこれをした理由は、私の元のプロジェクトには他にもいくつかの機能があるからです。可能であれば、この部分を変更しないでください。

答えて

0

いずれのウィジェットにもグリッドレイアウトを追加していないため、ボタンが表示されません。だから、すべての3つのグリッドレイアウトのため、このいずれかの操作を行います。チェック/ボタンのクリックを使用してラジオボタンのチェックを外し、これを行うに

self.grid = QGridLayout(self) 

class Tab1Layout(QWidget): 
    def __init__(self, parent = None): 
     ... 
     self.group2.pushbtn.clicked.connect(self.group1.radiobtn.toggle) 

self.grid = QGridLayout() 
    self.setLayout(self.grid) 

またはこれを

+0

私はこの権利を得ているので、私は3つのクラス 'C'で2つのクラス(' A'と 'B')をリンクさせて、' A'と 'B'の間のすべてのアクションを'私が議論をしている限り(例えば 'brid私の例では「ge」)を2つのクラスの1つに入れますか?さらに、「ブリッジ」を設定しないでください。 – ryan9025

+0

@ ryan9025。 'C'クラスは' A'と 'B'を知っていますが、' A'と 'B'はお互いを知りません。 'C'の中で' A'と 'B'の間にすべての信号を接続すると、必ずしもブリッジが必要なわけではありません。それはシグナルの美しさです。コンポーネントはお互いを知る必要はありません。彼らは到着時に信号に反応します。 「橋」の使用を推奨する別の質問をしましたか?もしそうなら、それなしでそれを解決することは可能かもしれません。 – ekhumoro

関連する問題