关闭从 QMainWindow 打开的 QWidget

Closing a QWidget opened from a QMainWindow

我需要在按下某个按钮时显示一个 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 呢?希望您能够帮助我。

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

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

如果您只想在显示主对话框的同时显示对话框 window,并且用户应该与两者交互(尽管从设计的角度来看,这听起来不是个好主意), 你可以继续使用 .show()

此外,您应该使用新式 signal/slot 语法。旧语法已经很多年没有使用了。

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

不过,对于 QDialog 你可以做到

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