Python中文
首页
教程
问答
标签
搜索
登录
注册
从wxpython中导入的模块捕获stdout并将其发送到textctrl,而不阻塞GUI
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>有很多类似的问题,但我找不到一个特别适用于我所要做的事情的问题。在</p> <p>我有一个模拟(用SimPy编写),我正在为它编写一个GUI,模拟的主要输出是从“print”语句到控制台的文本。现在,我认为最简单的方法是创建一个单独的模块图形用户界面.py,并将我的模拟程序导入其中:</p> <pre><code>import osi_model </code></pre> <p>我希望所有的打印语句都被GUI捕获并显示在Textctrl中,这里有无数的示例,大致如下:</p> ^{pr2}$ <p>我还从“开始”按钮开始模拟:</p> <pre><code>def go_btn_click(self, event): print 'GO' self.RT = threading.Thread(target=osi_model.RunThis()) self.RT.start() </code></pre> <p>这一切都很好,并且来自模拟模块的输出被textcrl捕获,除了GUI锁定并且变得无响应之外-我仍然需要它是可访问的(至少有一个“停止”按钮)。我不确定这是否是我在这里所做的创建新线程的拙劣尝试,但我认为在这个过程的某个阶段将需要一个新线程。在</p> <p>人们建议使用wx.CallAfter公司,但我不确定如何进行这项工作,因为导入的模块不了解wx,而且我也无法实际查看整个仿真架构并将所有打印语句更改为wx.CallAfter公司,任何从导入的模拟程序内部捕获shell的尝试都会导致程序崩溃。在</p> <p>有人知道我怎样才能最好地做到这一点吗?因此,我真正需要的是,在GUI保持响应的同时,所有控制台文本都被textcrl捕获,所有文本都只来自导入的模块。在</p> <p>(另外,关于停止按钮的第二个问题-仅仅杀死模拟线程是不是很糟糕?)。在</p> <p>谢谢</p> <p>邓肯</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>我建议你调查一下这个问题。在</p> <p>它专门解决了使用“开始”按钮作为一个长时间运行的进程所处理的情况。使用不同的技术(如线程和空闲处理程序)给出了几个不同的示例。在</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
无法使用Django/mongoengine连接到MongoDB(身份验证失败)
9 回答
无法使用Django\u mssql\u后端迁移到外部hos
1 回答
无法使用Django&Python3.4连接到MySql
2 回答
无法使用Django+nginx上载媒体文件
3 回答
无法使用Django1.6导入名称模式
10 回答
无法使用Django1.7和mongodb登录管理站点
8 回答
无法使用Djangoadmin创建项目,进程使用了错误的路径,因为我事先安装了错误的Python
8 回答
无法使用Djangockedi验证CBV中的字段
7 回答
无法使用Djangocketditor上载图像(错误400)
9 回答
无法使用Djangocron进行函数调用
5 回答
无法使用Djangofiler djang上载文件
3 回答
无法使用Djangokronos
6 回答
无法使用Djangomssql provid
2 回答
无法使用Djangomssql连接到带有Django 1.11的MS SQL Server 2016
6 回答
无法使用Djangomssq迁移Django数据库
6 回答
无法使用Djangonox创建用户
3 回答
无法使用Djangopyodb从Django查询SQL Server
7 回答
无法使用Djangopython3ldap连接到ldap
3 回答
无法使用Djangoredis连接到redis
4 回答
无法使用Django中的FK创建新表
10 回答