我需要显示一个QWidget
,当按下某个按钮时,哪个代码写在另一个模块中。为此,我写了这段代码:
class Window(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
#A lot of stuff in here
#The button is connected to the method called Serial_connection
self.connect(self.btn_selection_tool3, SIGNAL("clicked()"), self.Serial_connection)
def Serial_connection(self):
LiveData.LiveData(self).show()
这样做,我打开一个QWidget
,它运行正常。但是,当我想关闭这个QWidget
时,我无法做到。这是QWidget
:
class LiveData(QWidget):
def __init__(self,parent = None):
super(QWidget, self).__init__(parent)
#Another stuff in here
#I create a "close" button connected to another method
self.connect(self.closeBtn, QtCore.SIGNAL("clicked()"), self.StopAndClose)
def StopAndClose(self):
print "Closing window"
self.close() #HERE IS WHERE I HAVE THE PROBLEM
我尝试了多种选项:self.close()
,self.accept()
甚至sys.exit(1)
。后者sys.exit(1)
的问题在于它会关闭QWidget
和QMainWindow
。那么,我该如何关闭此QWidget
呢?希望您能够帮助我。
答案 0 :(得分:2)
您可能希望QWidget
成为QDialog
。如果它是临时模态小部件,您应该像这样调用对话框
dialog = LiveData.LiveData(self)
dialog.exec_()
如果您只想在主窗口的同时显示对话框,并且用户需要与两者进行交互(虽然从设计的角度来看,这听起来并不是一个好主意),您可以继续使用.show()
此外,您应该使用新式信号/插槽语法。旧的语法已经使用了很多年。
self.closeButton.clicked.connect(self.StopAndClose)
但是,对于QDialog
你可以做到
self.closeButton.clicked.connect(self.accept)