python-为什么在Windows下wx.Yield()显然不屈服
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-为什么在Windows下wx.Yield()显然不屈服,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2031字,纯文字阅读大概需要3分钟。
内容图文
![python-为什么在Windows下wx.Yield()显然不屈服](/upload/InfoBanner/zyjiaocheng/946/e56bd6a33057434a8ba994e9b10ac3ce.jpg)
我已经从一个小应用程序中删除了胆量来演示这种行为.在osx下,这符合我的预期:当您按下按钮时,它会打印“要求开始工作”,然后出现一个消息框,并且一切都会暂停,直到按下OK按钮,然后才开始打印“收益”,并且GUI仍然处于活动状态.
import wx
import time
class MainWindow(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title, size=(800, 700))
self.tabbed = wx.Notebook(self, -1, style=(wx.NB_TOP))
self.running = RunningPane(self.tabbed)
self.submissions = SubmissionPane(self.tabbed, self.running)
self.tabbed.AddPage(self.submissions, "Submit Job")
self.tabbed.AddPage(self.running, "Running Jobs")
self.Show()
class SubmissionPane(wx.Panel):
def __init__(self, parent, run_pane):
wx.Panel.__init__(self, parent, -1)
self.run_pane = run_pane
self.buttonGo = wx.Button(self, -1, "Submit", pos=(290,170))
self.buttonGo.Bind(wx.EVT_BUTTON, self.OnSubmit)
self.Show()
def OnSubmit(self, event):
self.run_pane.StartWork()
print "requested work start"
wx.MessageBox('Job Submitted')
print "displayed message box"
class RunningPane(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1)
self.running_log = wx.TextCtrl(self, -1, pos=(35, 210), size=(720,400))
self.Show()
def StartWork(self):
print "Asked to Start Work..."
wx.CallAfter(self.DoTheWork)
print "registered the CallAfter"
def DoTheWork(self):
print "Actually starting work"
self.running_log.WriteText("doing..."+"\n")
for i in range(20):
print "yielding"
wx.Yield()
time.sleep(1)
print "I pretended to do the work :) "
app = wx.App()
MainWindow(None, -1, 'Application')
app.MainLoop()
但是,在Windows下,对话框只有在打印20个产量(在按下按钮后立即开始)之后才会出现,并且GUI在此期间没有响应.
我是否误解了wx.Yield()的期望?
解决方法:
您必须记住,wxPython在每个OS上都包装了本机窗口小部件.如果本机窗口小部件在Windows上的行为与在Linux或Mac上的行为不同,则对于该OS实际上可能是正常的.我猜这就是这里正在发生的事情.一个简单的解决方法是只切换到可以模态显示的wx.MessageDialog.因此,用以下两个替换掉创建wx.MessageBox的行:
msg = wx.MessageDialog(self, 'Job Submitted', "Job", wx.OK)
msg.ShowModal()
内容总结
以上是互联网集市为您收集整理的python-为什么在Windows下wx.Yield()显然不屈服全部内容,希望文章能够帮你解决python-为什么在Windows下wx.Yield()显然不屈服所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。