关闭从QMainWindow打开的QWidget

时间:2016-05-25 18:14:22

标签: python pyqt qwidget

我需要显示一个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)的问题在于它会关闭QWidgetQMainWindow。那么,我该如何关闭此QWidget呢?希望您能够帮助我。

1 个答案:

答案 0 :(得分:2)

您可能希望QWidget成为QDialog。如果它是临时模态小部件,您应该像这样调用对话框

dialog = LiveData.LiveData(self)
dialog.exec_()

如果您只想在主窗口的同时显示对话框,并且用户需要与两者进行交互(虽然从设计的角度来看,这听起来并不是一个好主意),您可以继续使用.show()

此外,您应该使用新式信号/插槽语法。旧的语法已经使用了很多年。

self.closeButton.clicked.connect(self.StopAndClose)

但是,对于QDialog你可以做到

self.closeButton.clicked.connect(self.accept)