如何以编程方式关闭wx.DirDialog?

2024-05-06

我有 wxpython 应用程序,可以在单击按钮时打开 wx.DirDialog 。

dlg = wx.DirDialog(self, "Choose a directory:", style=wx.DD_DEFAULT_STYLE)
    if dlg.ShowModal() == wx.ID_OK:
        # Do some stuff

由于我的应用程序是多线程的,并且使用 wxTaskbaricon ,它允许用户(在 Win 7 上)即使在模式 DirDialog 打开时也可以关闭应用程序,所以我想在关闭主应用程序之前关闭 DirDialog。不知何故,以下方法不起作用:

dlg.Destroy()
dlg.Close(True)

这是我的测试代码。

我可以测试Destroy(), Close() and EndModal()关于模态和非模态wx.DirDialog()

要关闭模式对话框,我必须使用计时器 - 因为模式对话框阻止访问主窗口。

仅当我这样做时它才无法关闭对话框

self.dlg = None
self.dlg.EndModal(wx.CANCEL) # or Destroy() or Close(True)

还有一件事 - 我使用 Linux Mint 15、Python 2.7.4、wxPython 2.8.12.1 :)


#!/usr/bin/env python
#-*- coding: utf-8 -*-

import wx
import sys # to get python version

#----------------------------------------------------------------------

class MyFrame(wx.Frame):

    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title, size=(600,100))

        self.panel = wx.Panel(self)

        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.panel.SetSizer(self.sizer)


        self.label = wx.StaticText(self.panel, label="Python "+sys.version+"\nwxPython"+wx.version())
        self.button1 = wx.Button(self.panel, label="On")
        self.button2 = wx.Button(self.panel, label="Off")

        self.sizer.Add(self.label)
        self.sizer.Add(self.button1)
        self.sizer.Add(self.button2)

        self.Bind(wx.EVT_BUTTON, self.OpenDialog, self.button1)
        self.Bind(wx.EVT_BUTTON, self.CloseDialog, self.button2)

        self.timer = wx.Timer(self)
        self.Bind(wx.EVT_TIMER, self.TimerCloseDialog, self.timer)

        self.Show(True)

        self.dlg = None

    def OpenDialog(self, event):
        print "OpenDialog"

        self.timer.Start(3000, oneShot=True)
        print "wait 3s ..."

        if not self.dlg:
            self.dlg = wx.DirDialog(self)
            self.dlg.ShowModal()
            #self.dlg.Show(True)

    def CloseDialog(self, event):
        print "CloseDialog"
        if self.dlg:
            #self.dlg = None
            #self.dlg.EndModal(wx.CANCEL)
            self.dlg.Destroy()
            #self.dlg.Close(True)

    def TimerCloseDialog(self, event):
        print "TimerCloseDialog"
        if self.dlg:
            #self.dlg = None
            self.dlg.EndModal(wx.CANCEL)
            #self.dlg.Destroy()
            #self.dlg.Close(True)

#----------------------------------------------------------------------

print "Python", sys.version
print "wxPython", wx.version()

app = wx.App()
frame = MyFrame(None, "Hello Dialog")
app.MainLoop()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何以编程方式关闭wx.DirDialog? 的相关文章

  • 如果两点之间的距离低于某个阈值,则从列表中删除点

    我有一个点列表 只有当它们之间的距离大于某个阈值时 我才想保留列表中的点 因此 从第一个点开始 如果第一个点和第二个点之间的距离小于阈值 那么我将删除第二个点 然后计算第一个点和第三个点之间的距离 如果该距离小于阈值 则比较第一点和第四点
  • 将html数据解析成python列表进行操作

    我正在尝试读取 html 网站并提取其数据 例如 我想查看公司过去 5 年的 EPS 每股收益 基本上 我可以读入它 并且可以使用 BeautifulSoup 或 html2text 创建一个巨大的文本块 然后我想搜索该文件 我一直在使用
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • Python getstatusoutput 替换不返回完整输出

    我发现了这个很棒的替代品getstatusoutput Python 2 中的函数在 Unix 和 Windows 上同样有效 不过我觉得这个方法有问题output被构建 它只返回输出的最后一行 但我不明白为什么 任何帮助都是极好的 def
  • 用枢轴点拟合曲线 Python

    我有下面的图 我想用 2 条线来拟合它 使用 python 我设法适应上半部分 def func x a b x np array x return a x b popt pcov curve fit func up x up y 我想用另
  • Pandas 日期时间格式

    是否可以用零后缀表示 pd to datetime 似乎零被删除了 print pd to datetime 2000 07 26 14 21 00 00000 format Y m d H M S f 结果是 2000 07 26 14
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • Python beautifulsoup 仅限 1 级文本

    我看过其他 beautifulsoup 得到相同级别类型的问题 看来我的有点不同 这是网站 我正试图拿到右边那张桌子 请注意表的第一行如何展开为该数据的详细细分 我不想要那个数据 我只想要最顶层的数据 您还可以看到其他行也可以展开 但在本例
  • 如何使用 Mysql Python 连接器检索二进制数据?

    如果我在 MySQL 中创建一个包含二进制数据的简单表 CREATE TABLE foo bar binary 4 INSERT INTO foo bar VALUES UNHEX de12 然后尝试使用 MySQL Connector P
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • Cython 和类的构造函数

    我对 Cython 使用默认构造函数有疑问 我的 C 类 Node 如下 Node h class Node public Node std cerr lt lt calling no arg constructor lt lt std e
  • 加快网络抓取速度

    我正在使用一个非常简单的网络抓取工具抓取 23770 个网页scrapy 我对 scrapy 甚至 python 都很陌生 但设法编写了一个可以完成这项工作的蜘蛛 然而 它确实很慢 爬行 23770 个页面大约需要 28 小时 我看过scr
  • 不同编程语言中的浮点数学

    我知道浮点数学充其量可能是丑陋的 但我想知道是否有人可以解释以下怪癖 在大多数编程语言中 我测试了 0 4 到 0 2 的加法会产生轻微的错误 而 0 4 0 1 0 1 则不会产生错误 两者计算不平等的原因是什么 在各自的编程语言中可以采
  • 如何在 Windows 命令行中使用参数运行 Python 脚本

    这是我的蟒蛇hello py script def hello a b print hello and that s your sum sum a b print sum import sys if name main hello sys
  • 根据列 value_counts 过滤数据框(pandas)

    我是第一次尝试熊猫 我有一个包含两列的数据框 user id and string 每个 user id 可能有多个字符串 因此会多次出现在数据帧中 我想从中导出另一个数据框 一个只有那些user ids列出至少有 2 个或更多string
  • Django-tables2 列总计

    我正在尝试使用此总结列中的所有值文档 https github com bradleyayers django tables2 blob master docs pages column headers and footers rst 但页
  • 如何应用一个函数 n 次? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 假设我有一个函数 它接受一个参数并返回相同类型的结果 def increment x return x 1 如何制作高阶函数repeat可以
  • Pandas 每周计算重复值

    我有一个Dataframe包含按周分组的日期和 ID df date id 2022 02 07 1 3 5 4 2022 02 14 2 1 3 2022 02 21 9 10 1 2022 05 16 我想计算每周有多少 id 与上周重
  • 更改 Tk 标签小部件中单个单词的颜色

    我想更改 Tkinter 标签小部件中单个单词的字体颜色 我知道可以使用文本小部件来实现与我想要完成的类似的事情 例如使单词 YELLOW 显示为黄色 self text tag config tag yel fg clr yellow s
  • cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

    我正在使用 OpenCV 4 0 和 Python 3 7 创建延时视频 构造 VideoWriter 对象时 文档表示 Size 参数应该是一个元组 当我给它一个元组时 它拒绝它 当我尝试用其他东西替换它时 它不会接受它 因为它说参数不是

随机推荐