【问题标题】:Closing a QWidget opened from a QMainWindow关闭从 QMainWindow 打开的 QWidget
【发布时间】:2016-05-26 03:28:54
【问题描述】:

当按下某个按钮时,我需要显示一个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 的显示效果如何?我想象它会覆盖在您当前的小部件之上。您希望它在另一个对话框中打开吗?
  • 在我点击QMainWindow 中的self.btn_selection_tool3 按钮后出现QWidget,它调用Serial_connection 方法,它调用show() 方法来显示QWidget。我需要关闭最后一个,我不能使用self.close()
  • 是的,它只是将小部件放在主窗口的顶部而不定位它(就像将它放在布局中一样)。 close 没有做任何事情,因为它在 QWidgets 的上下文中没有意义。您可以通过在其上调用.deleteLater() 来删除小部件。但我仍然认为您应该将其设为QDialog,或者在主窗口中制作一个永久小部件,然后仅显示/隐藏或启用/禁用它,而不是不断创建和删除它(尤其是在没有正确定位的情况下)

标签: python pyqt qwidget


【解决方案1】:

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

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

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

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

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

不过,对于QDialog,您可以这样做

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

【讨论】:

  • 感谢您的回答,它的工作原理是这样的。请问如何检测此对话框何时关闭?
  • 一般来说,你监听接受或拒绝的事件。如果您使用的是 exec_ 那么您只需等待函数返回
  • 谢谢,我明白了。再次感谢您
猜你喜欢
  • 1970-01-01
  • 2021-11-26
  • 2014-10-24
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 1970-01-01
  • 2017-11-24
  • 2018-07-13
相关资源
最近更新 更多