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