Communication between mianwindow and dialog in python -
hello working on data archive program python 2.7. have 1 mainwindow , there elements (buttons, text lines etc.) clicking button open dialog form page. user select answer on dialog page. dialog page has button named 'save'. when clicking save button dialog class saving user's selections database. want do, when user clicked save button on dialog, enable elements on mainwindow not enabled. doing these codes entering dialog class , save button function:
self.ui.oncebut.setenabled(true) etc.
but taking error:
attributeerror: 'oncedlg' object has no attribute 'oncebut'
oncedlg dialog pages class name.
how can solve , can want? in advance.
self in self.ui.oncebut.setenabled(true) refers dialog, error because oncebut in mainwindow not in oncedlg dialog.
solution: @radio - communication between components in qt done using signals , slots, it's not way. easier way pass main window dialog window, can manipulate it's buttons, or whatever want, inside dialog window. in next example i've done in line dialog = dialog(self), self refers mainwindow , used mainwin inside dialog. run it, click on first button, dialog show, click save button in dialog , second button in main changed , disabled. hope i've helped you.
import sys pyqt4 import qtcore, qtgui class dialog(qtgui.qdialog): def __init__(self, mainwin): qtgui.qdialog.__init__(self,mainwin) self.setwindowtitle(self.tr("dialog window")) self.main = mainwin button = qtgui.qpushbutton() button.settext( "save (disable dummy button)" ) layout = qtgui.qvboxlayout() layout.addwidget(button) self.setlayout(layout) self.connect(button, qtcore.signal("clicked()"), self.save) self.resize(200, 100) def save(self): self.main.button2.setenabled(false) self.main.button2.settext( "changed dialog" ) class mainwindow(qtgui.qmainwindow): def __init__(self): super(mainwindow, self).__init__() self.setwindowtitle(self.tr("main window")) self.button1 = qtgui.qpushbutton() self.button2 = qtgui.qpushbutton() self.button1.settext( "open dialog" ) self.button2.settext( "dummy" ) layout = qtgui.qvboxlayout() layout.addwidget(self.button1) layout.addwidget(self.button2) self.window = qtgui.qwidget() self.window.setlayout(layout) self.setcentralwidget(self.window); self.connect(self.button1, qtcore.signal("clicked()"), self.showdialog) self.resize(360, 145) def showdialog(self): dialog = dialog(self) dialog.show() if __name__ == "__main__": app = qtgui.qapplication(sys.argv) main = mainwindow() main.show(); sys.exit(app.exec_())
Comments
Post a Comment