【问题标题】:Python 2.7: Close a dialog without exiting the entire applicationPython 2.7:关闭对话框而不退出整个应用程序
【发布时间】:2019-01-22 23:31:27
【问题描述】:

我正在从桌面应用程序的脚本菜单运行用 python 编码的脚本。它基本上是一个巨大的宏,我编写并添加了一个 GUI。我很确定 GUI 是我的桌面应用程序使用的一个非常古老的 GUI,称为 MIT 的 dialogKit。 GitHub still has it here. 问题是对话代码末尾的“停止”一词。 我不断收到“停止未定义”消息,我理解,但我已经尝试了一切来关闭对话框,如果我使用 exit()sys.exit(),我没有收到错误,但它也会关闭我的整个桌面应用程序。

我需要关闭对话框并保持软件打开。 我正在使用的有限对话框文档可以在here 找到。 (您可能需要点击对话框部分。他们的网站使用框架。)

class MyDialog:
    def __init__(self):
        self.d = Dialog(self)
        self.d.size = Point(300, 340)
        self.d.Center()
        self.d.title = "Halftone" #<----- Title of the dialogue
        self.d.AddControl(STATICCONTROL, Rect(aIDENT, aIDENT, aIDENT, aIDENT), "frame", STYLE_FRAME)

        # more controls and methods..

        def on_ok(self, code):
            return 1

        def on_cancel(self, code):
            print "blah"

        def Run(self):
            return self.d.Run() 

    d = MyDialog()
    if d.Run()!= 1:
        stop

我只需要一种方法将 stop 更改为 1) 将阻止脚本运行,以及 2) 关闭对话框而不退出整个应用程序。这是一个典型的“取消”按钮的功能,这正是我想要的。

另一种选择是称为on_cancel() 的方法,我也尝试过并且可以让事件本身工作,但整个应用程序仍然会以任何类型的exit() 退出。

文档显示了一个名为End() 的方法,该方法声称终止对话对象,但我尝试过也未能使其正常工作。

【问题讨论】:

  • 快速查看文档后,我认为 End() 就是您想要的。你是如何使用它的,发生了什么?
  • 我尝试用d.End() 替换stop 然后我尝试定义一个名为End() 的函数,并在其中尝试了exit()sys.exit()
  • d.End() 是否抛出异常?我认为它应该有 - 你的班级没有一个名为 End 的函数。您必须使用 d.d.End(),或者您可以尝试将 self.d.End() 放入类中的 on_cancel 函数中。

标签: python python-2.7 dialog


【解决方案1】:

好的,我发布答案是因为我认为我可以解决您的问题。

尝试将 stop 替换为:

d.d.End()

如果可行,您可能想尝试放置:

self.d.End()

在你的类中的 on_cancel 函数内部。这应该会在不关闭程序的情况下关闭对话。

【讨论】:

    猜你喜欢
    • 2013-03-15
    • 1970-01-01
    • 2022-01-20
    • 2012-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    相关资源
    最近更新 更多