2012-05-18 2 views
0

Eric4와 PyQt4를 사용하여 앱을 만들고 있지만 초보자 인 나랑 벗겨주세요.Python PyQt4 현재 열려있는 대화 상자를 참조하는 방법은 무엇입니까?

두 개의 대화 상자가 있습니다. 하나는 스레드로 실행되고 다른 하나는 레이블이있는 표준 대화 상자로 이미지로 변경하려고합니다.

메인 윈도우 스레드가 실행될 때마다 대화 상자에 표시된 현재 이미지를 새 이미지로 변경하고 싶습니다. 스레드가 실행될 때를 제외하고는 모두 잘 작동합니다. 새 이미지가있는 새 대화 상자가 만들어집니다. 현재 열려있는 대화 상자에서 이미지를 변경하고 싶습니다. 이미지를 변경

class SubWindow(QDialog, Ui_subWindow): 
    def __init__(self, parent = None): 
     QDialog.__init__(self, parent) 
     self.setupUi(self) 
     self.show() 

    def main(self, img): 
     pic = self.imgView 
     pic.setPixmap(QtGui.QPixmap(os.getcwd() + img)) 

스레드 : 내 모든 코드 만 해당 비트를 포함하지했습니다

class MainWindow(QDialog, Ui_MainWindow, threading.Thread): 
    def __init__(self, parent = None): 
     threading.Thread.__init__(self) 
     QDialog.__init__(self, parent) 
     self.setupUi(self) 
     self.show() 
     #some code here which does some stuff then calls changeImg() 

    def changeImg(self): 
     img = SubWindow() 
     img.main(img) 

내부 이미지와

대화 상자. 어떤 도움을 주시면 감사하겠습니다. 감사.

+0

하지만 의심스러운 : 나는 MainWindiw.__init__ 기능에 MainWindow에 속성으로 SubWindow을 만드는 것이 좋습니다. 첫째, GUI 요소와의 상호 작용에 관해서는 Qt의 자체 스레딩 클래스 인'QThread'를 사용하는 것이 좋습니다. 둘째, 다른 스레드에 GUI 관련 내용을 넣지 않아야합니다. 모든 GUI 코드는 이벤트 루프와 동일한 스레드에서 실행되어야합니다. – Avaris

답변

0

이미지를 바꿀 때마다 새로운 SubWindow을 만드는 것이 문제인 것처럼 보입니다. 난 당신의 코드가 무엇을하는지 아무 생각이

class MainWindow(QDialog, Ui_MainWindow, threading.Thread): 

    def __init__(self, parent = None): 
     threading.Thread.__init__(self) 
     QDialog.__init__(self, parent) 
     self.setupUi(self) 
     self.show() 
     self.img = SubWindow() # Create SubWindow once here 

    def changeImg(self): 
     self.img.main(self.img) # Only change the image, no new SubWindow 
+0

답해 주셔서 감사합니다.하지만 안타깝게도 작동하지 않습니다. MainWindow 클래스는 여러 번 스레드로 실행되며, 실행될 때마다 새 SubWindow가 생성됩니다. – amba88

관련 문제