我一直试图关闭一个从主窗口分支的QDialog窗口。到目前为止,以下几点对我并没有起作用:
self.close()
QDialog.close()我尝试了其他命令,如exit和exec_(),但没有成功。我遇到的最常见的错误是
className对象没有属性“关闭”
# Creating our window
class Ui_MainWindow(object):
# Sets up GUI
def setupUi(self, MainWindow):
[GUI CODE]
# Sets text for parts of GUI
def retranslateUi(self, MainWindow):
[MORE GUI CODE]
# Function handling screencap on click and metadata for filenames
def cap_on_Click(arg1,arg2):
popup = QDialog()
popup_ui = Ui_Dialog()
popup_ui.setupUi(popup)
popup.show()
sys.exit(popup.exec_())以上是我的主要窗口。
class Ui_Dialog(object):
def setupUi(self, Dialog):
[GUI CODE]
def retranslateUi(self, Dialog):
[MORE GUI CODE]
def button_click(self, arg1):
self.close()第二个块是对话框窗口代码。如何关闭此对话框窗口?
发布于 2015-06-30 19:40:11
首先,很抱歉与C++相关的链接,但是Python有着相同的概念。
可以尝试使用reject或accept或done函数关闭对话框。通过这样做,可以适当地设置返回值(Rejected、Accepted或指定为参数的值)。
总之,您应该尝试调用YourDialog.done(n)关闭对话框,并在希望它被接受/拒绝时返回n和YourDialog.accept()或YourDialog.reject()。
发布于 2015-06-30 20:03:12
因为QDialog是QWidget,而QWidget有close()方法,我不明白它怎么不能工作。但是,您永远不应该调用popup.exec_(),因为它将很高兴地要求大量代码在您没有意识到的情况下被重入。这是不必要的--您已经让应用程序事件循环运行,并且在执行cap_on_Click时在调用堆栈上运行。
在popup.show()之后,对话框将是可见的和可用的,直到它被用户接受或拒绝为止。希望您的对话框设计将按钮框的accepted()和rejected()信号连接到对话框的accept()和reject()插槽。这是Qt以及Qt提供的QDialog模板的默认行为,但是您应该在查看Ui文件时进入信号/插槽编辑器模式来检查它。
发布于 2018-04-03 13:39:19
我猜问题在于Ui_Dialog没有继承QDialog,因此没有定义reject()、accept()和done()。我认为
class Ui_Dialog(object):应改为
class Ui_Dialog(QDialog):但是我不能测试它,因为没有提供最小的工作示例。
https://stackoverflow.com/questions/31146799
复制相似问题