gpt4 book ai didi

python - wxPython 仪表在 Linux 上卡住

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:16:01 26 4
gpt4 key购买 nike

我正在为 Linux 上的 wxPython 而苦苦挣扎。经过大量时间和调查,我已将我的程序减少到最低限度,以向您展示我遇到的一个问题。我可以将它缩减为一个非常小的代码示例,在窗口中仅使用一个由计时器更新的仪表。我的第一个问题出现在按钮的背景颜色应该很快改变的地方,这导致了奇怪的内存错误。由于完整的应用程序非常复杂,所以我搜索了一个简单的示例 - bingo!这是在 Windows 上运行良好但在 Raspberry Pi 以及 Raspberry Pi 和 Debian 9 的 VirtualBox VM 上运行良好的简化代码。我已经尝试过 wxPython 3.0.2.0 和 4.0.3,每个都带有 gtk2 和 python 2.7 以及 python 3.5:

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import wx
from threading import Timer

class MainWindow(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Test", size=(600, 100))
panel = wx.Panel(self)

self.gauge = wx.Gauge(panel, wx.ID_ANY, 100, (10, 10), (480, 10))
self.gaugeval = 0
self.gauge.SetValue(self.gaugeval)

self.Show()
Timer(1, self.loop).start()

def loop(self):
self.gaugeval += 1
if self.gaugeval > 100:
self.gaugeval = 0
self.gauge.SetValue(self.gaugeval)
Timer(0.01, self.loop).start()


app = wx.App(False)
frame = MainWindow()
app.MainLoop()

启动程序后,需要一秒钟的时间,仪表才会“启动”并从左到右填满条形图,然后再次从左侧开始,依此类推。但是,在任何经过​​测试的 Linux 系统上,它都会很快死机。

这里发生了什么?谁能重现这个?我简直不敢相信这么简单的功能不会起作用。非常感谢您查看此问题!

最佳答案

我怀疑您的问题可能与使用线程模块中的 Timer 有关。
使用 wx.Timer

import wx

class MainWindow(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Test", size=(600, 100))
panel = wx.Panel(self)
self.timer = wx.Timer(self)
self.Bind(wx.EVT_TIMER, self.onTimer, self.timer)
self.gauge = wx.Gauge(panel, wx.ID_ANY, 100, (10, 10), (480, 10))
self.Show()
self.timer.Start(100) # fire every 10th of a second

def onTimer(self, evt):
val = self.gauge.GetValue()
val += 1
if val > 100:
val = 0
self.gauge.SetValue(val)

app = wx.App(False)
frame = MainWindow()
app.MainLoop()

关于python - wxPython 仪表在 Linux 上卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51755148/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com