PyQt4的:当一个复选框被选中,按下一个按钮,从LineEdit打印一些文本,如果其他复选框还检查

问题描述:

import sys, os 
import PyQt4 
from PyQt4 import QtGui, QtCore 
from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

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

     self.Tab1Widget1initUI() 

     self.bridge = Tab1Widget2() 

    def Tab1Widget1initUI(self): 
     self.setLayout(QGridLayout()) 

     self.T1W1_checkbox = QCheckBox('checkbox1', self) 
     self.layout().addWidget(self.T1W1_checkbox, 1, 0) 

    def test(self): 
     print ('123') 


    def run(self): 
     if self.T1W1_checkbox.isChecked() == True: 
      self.test() 
      if self.bridge.T1W2_checkbox.isChecked() == True: 
       print (self.bridge.T1W2_le.text()) 

class Tab1Widget2(QWidget): 

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

     self.T1W2_checkbox = QCheckBox('checkbox2', self) 
     self.layout().addWidget(self.T1W2_checkbox, 0, 0) 

     self.T1W2_le = QLineEdit() 
     self.layout().addWidget(self.T1W2_le, 0, 1) 

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

     self.group1 = Tab1Widget1(self) 
     scroll = QScrollArea(self) 
     scroll.setWidget(self.group1) 
     scroll.setWidgetResizable(True) 
     self.layout().addWidget(scroll, 0, 0) 

     self.group2 = Tab1Widget2(self) 
     self.layout().addWidget(self.group2, 1, 0) 

     self.btnRun = QPushButton('Run', self) 
     self.layout().addWidget(self.btnRun, 3, 0) 
     self.btnRun.clicked.connect(self.group1.run) 


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

     self.tab2 = QWidget() 
     self.tab3 = QWidget() 
     self.addTab(self.tab2, "Tab2") 
     self.addTab(self.tab3, "Tab3") 
     self.tab2_initUI() 
     self.tab3_initUI() 

    def tab2_initUI(self): 
     grid = QGridLayout() 
     self.tab2.setLayout(grid) 

    def tab3_initUI(self): 
     grid = QGridLayout() 
     self.tab3.setLayout(grid) 

class MainWindow(QMainWindow): 
    def __init__(self, parent=None): 
     super().__init__() 
     self.setGeometry(450, 250, 800, 550) 
     self.startPage1() 

    def startPage1(self): 
     x = Page1(self) 
     self.setWindowTitle("Auto Benchmark") 
     self.setCentralWidget(x) 
     self.show() 

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


if __name__ == '__main__': 
    main() 

如果checkbox1被选中,我按下按钮run,它将打印123。但是,按run按钮,我想checkbox2也打印一些以lineedit输入的文本,如果复选框1也被选中(即它应该首先打印123然后打印456)。PyQt4的:当一个复选框被选中,按下一个按钮,从LineEdit打印一些文本,如果其他复选框还检查

我查了一些类似的问题,但没有提供正确的答案。如果有人知道如何解决它,请让我知道谢谢!

问题是,您正在创建多个Tab1Widget2,这是您在Tab1Layout中创建的第一个Tab1Widget2,并且这是您看到的那个,然后您在Tab1Widget1中创建了另一个TaberWidget1,但由于您尚未传递父代如果你将它传递给** **自我父,你会注意以下几点:

self.bridge = Tab1Widget2(self) 

enter image description here

这是不是你想要什么,所以,而不是创建一个新的,你必须通过一个已经存在,一个选项是通过它的构造函数:

class Tab1Widget1(QWidget): 
    def __init__(self, bridge, parent=None): # Modify here 
     super().__init__(parent) 
     self.Tab1Widget1initUI() 

     self.bridge = bridge #Modify here 

    [...] 

    def test(self): print ('123') 

    def run(self): 
     if self.T1W1_checkbox.isChecked(): 
      self.test() 
      if self.bridge.T1W2_checkbox.isChecked(): 
       print (self.bridge.T1W2_le.text()) 

class Tab1Widget2(QWidget): 
    def __init__(self, parent=None): 
     [...] 

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

     self.group2 = Tab1Widget2(self) # Modify here 
     self.group1 = Tab1Widget1(self.group2, self) # Modify here 
     scroll = QScrollArea(self) 
     scroll.setWidget(self.group1) 
     scroll.setWidgetResizable(True) 
     self.layout().addWidget(scroll, 0, 0) 

     # self.group2 = Tab1Widget2(self) # Modify here 
     self.layout().addWidget(self.group2, 1, 0) 

     [...] 
+0

但是,当我这样做,它仍然不会显示'456',但只有'123'fhen chefckbox1&checkbox2检查?由'456'表示 – ryan9025

+0

我的意思是LineEdit中输入的文字 – ryan9025

+0

我不理解你,请更好地解释一下自己。 – eyllanesc