2017-05-19 9 views
0

PyQt4를 사용하여 작은 GUI 프로젝트를 진행하고 있습니다. 내가 사용해야하는 combo_boxes의 기본 기능을 정의하는 하나의 클래스 (별도의 파일 내부)와 모든 combo_boxes에 대한 기능을 사용하는 다른 클래스를 정의했습니다. 예상대로PyQt4에 나열된 옵션으로 변경되었습니다. 다른 클래스에 정의 된 combo_box가 반영되지 않았습니다.

from file import * 
class Window(QtGui.QMainWindow): 
    def __init__(self): 
     super(Window, self).__init__() 
     self.setGeometry(200, 100, 820, 700) 
     combo_box_one = core("first", self) 
     combo_box_two = core("second", self) 

    #some other methods follow defining the geometry for each combo_box and other functions 

def main(): 
    app = QtGui.QApplication(sys.argv) 
    gui = Window() 
    sys.exit(app.exec_()) 
main() 

GUI는 노력 : 코드는

class core: 
    def __init__(self, default_value, window_name): 
     self.combo_box = QtGui.QComboBox(window_name) 
     self.combo_box.addItem(default_value) 
     self.combo_box.addItem("some other value") 
     self.combo_box.addItem("a third value") 
     self.combo_box.activated[str].connect(self.set_text) 
     self.text = default_value 


    def set_text(self, text): 
     print text 

같이 보입니다 주요 클래스는 뭔가 같다. 모든 combo_boxes는 정의 된 지오메트리마다 나타납니다. 그러나 다른 옵션을 선택할 때 아무 것도 발생하지 않습니다. 이상적으로는 옵션의 텍스트가 인쇄 될 것으로 기대합니다. 실제로 combo_box 객체를 주 클래스로 반환하고 거기에 연결을 설정하면 옵션의 변경 사항이 반영됩니다. 그러나 같은 일이 core 클래스에서 수행되면 변경 내용이 인쇄 된 텍스트로 반영되지 않습니다. 범위 관련 것입니까? 무슨 일이 일어나는지 이해하게 도와주세요.

답변

0

슬롯 만 QObject 상속 클래스에서 구현 될 수있는 간단한 해결책은 코어 클래스 QObjectQComboBox로부터 상속 때문에 QComboBox 상속이다.

class core(QtGui.QComboBox): 
    def __init__(self, default_value, window_name): 
     QtGui.QComboBox.__init__(self, window_name) 
     self.addItem(default_value) 
     self.addItem("some other value") 
     self.addItem("a third value") 
     self.activated[str].connect(self.set_text) 


    def set_text(self, text): 
     print(text) 
+0

@eyllansec 의견을 보내 주셔서 감사합니다. 이것은 텍스트 인쇄에 도움이됩니다. 나는 그것이 문제를 해결할 것이라고 생각했다. 그러나'set_text' 메쏘드에서'self.text = text'라는 텍스트 변수를'core' 클래스에 설정하고 메쏘드를 호출하고 메인 클래스에서 버튼을 누를 때마다 이것을 호출하려고하면' self.text' 변수. 왜 그런지 모르겠습니다. 버튼을 누를 때마다 현재 값이 반환된다는 인상을 받고있었습니다. – 0Nicholas