Менять элементы QComboBox с помощью QCheckBox из другого класса - PullRequest
0 голосов
/ 10 мая 2018

Я пытаюсь выяснить, как изменить элементы в QComboBox из другого класса.Я уже пробовал несколько способов, включая попытки заполнить предметы из другого класса.В моем примере ниже я встраиваю класс Widget1, который имеет QCheckBox, в MainWindow и пытаюсь изменить элементы списка, когда он проверен, но он не работает.Он будет печатать соединение, но потом больше ничего.Может кто-нибудь объяснить, что я делаю не так?Спасибо.

import sys
from PyQt5.QtWidgets import QWidget, QComboBox, QHBoxLayout, QApplication, QVBoxLayout, QCheckBox

class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.widget1 = Widget1
        self.hbox = QHBoxLayout()
        self.Combo_Box = QComboBox()
        self.hbox.addWidget(self.Combo_Box)
        self.hbox.addWidget(self.widget1())
        self.setLayout(self.hbox)
        self.list = ['1','2','3','4','5','6']
        self.Combo_Box.addItems(self.list)

    def change_ComboBox(self):
        print("connected")
        self.Combo_Box.clear()
        self.list2 = ['7', '8', '9', '10', '11', '12']
        self.Combo_Box.addItems(self.list2)

class Widget1(QWidget):
    def __init__(self):
        super(Widget1, self).__init__()
        self.vbox = QVBoxLayout()
        self.check_Box = QCheckBox(self)
        self.vbox.addWidget(self.check_Box)
        self.check_Box.clicked.connect(self.send_change_ComboBox)

    def send_change_ComboBox(self):
        self.mainwindow = MainWindow()
        if self.check_Box.isChecked():
            self.mainwindow.change_ComboBox()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    wnd = MainWindow()
    wnd.show()
    app.exec_()

1 Ответ

0 голосов
/ 10 мая 2018

Попробуйте:

import sys
from PyQt5.QtWidgets import QWidget, QComboBox, QHBoxLayout, QApplication, QVBoxLayout, QCheckBox

class MainWindow(QWidget):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.widget1   = Widget1(self)            
        self.hbox      = QHBoxLayout()
        self.Combo_Box = QComboBox()
        self.hbox.addWidget(self.Combo_Box)
        self.hbox.addWidget(self.widget1)     
        self.setLayout(self.hbox)
        self.initUi()

    def initUi(self): 
        self.Combo_Box.clear()    
        self.list = ['1','2','3','4','5','6']
        self.Combo_Box.addItems(self.list)

    def change_ComboBox(self):
        print("connected")
        self.Combo_Box.clear()
        self.list2 = ['7', '8', '9', '10', '11', '12']
        self.Combo_Box.addItems(self.list2)

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

        self.vbox      = QVBoxLayout()
        self.check_Box = QCheckBox(self)
        self.vbox.addWidget(self.check_Box)
        self.check_Box.clicked.connect(self.send_change_ComboBox)

    def send_change_ComboBox(self):
        if self.check_Box.isChecked():
            self.parent.change_ComboBox()
        else:
            self.parent.initUi()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    wnd = MainWindow()
    wnd.show()
    app.exec_()

enter image description here

...