关闭从 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)
的问题在于它关闭了 QWidget
和 QMainWindow
。那么,我怎样才能关闭这个 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)
我需要在按下某个按钮时显示一个 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
成为 QDialog
。如果它是临时模态小部件,您应该像这样调用对话框
dialog = LiveData.LiveData(self)
dialog.exec_()
如果您只想在显示主对话框的同时显示对话框 window,并且用户应该与两者交互(尽管从设计的角度来看,这听起来不是个好主意), 你可以继续使用 .show()
此外,您应该使用新式 signal/slot 语法。旧语法已经很多年没有使用了。
self.closeButton.clicked.connect(self.StopAndClose)
不过,对于 QDialog
你可以做到
self.closeButton.clicked.connect(self.accept)