hi ich würde gerne eine prozessbar mit wxpython erstellen.
ich hab keine funktion für sowas gefunden deshalb hab ich mir gedacht ich mach einfach eine blaues feld und verändere die x achse des feldes mit den prozent.
ich bekomm das aber nicht hin. könnt ihr mir bitte weiterhelfen?
mfG
mephisto
prozessbar
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo mephisto!mephisto23 hat geschrieben:prozessbar
Suche in der wxPython-Demo nach "Gauge".
mfg
Gerold

http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
-
- User
- Beiträge: 18
- Registriert: Montag 10. September 2007, 13:47
danke werd ich machen.
-
- User
- Beiträge: 60
- Registriert: Freitag 8. Juni 2007, 07:39
Hier mal ein einfaches Beispiel, ist aber ziemlich Sinnfrei, weil dein Programm dort stehen bleibt.
Hier die bessere Lösung:
Viel Spass damit.
HarryPython

Code: Alles auswählen
import wx
a = wx.App(0)
dialog = wx.ProgressDialog("test1", "Was geht", 100000)
dialog.Show(True)
aktuellerwert=0
for aktuellerwert in range(100000):
print aktuellerwert
dialog.Update(aktuellerwert, newmsg="NeueBeschriftung")
dialog.Destroy()
Hier die bessere Lösung:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-
import wx
import threading
import time
wx.SetDefaultPyEncoding("iso-8859-1")
class PulseProgressDialog(wx.ProgressDialog, threading.Thread):
def __init__(
self, title = "Meine pulsierende Progressbar",
message = "Bitte warten...", parent = None, style = wx.PD_APP_MODAL
):
wx.ProgressDialog.__init__(
self, title = title, message = message, parent = parent, style = style
)
threading.Thread.__init__(self)
self.stop_event = threading.Event()
def run(self):
"""
In dieser Threadprozedur läuft der zusätzliche Thread.
Alles was von hier aus die GUI ändert, muss über wx.CallAfter laufen.
"""
self.Show()
# Läuft bis das Stop-Event gesetzt wurde
while not self.stop_event.isSet():
wx.CallAfter(self.UpdatePulse)
time.sleep(0.5)
self.Destroy()
def stop(self):
"""
Setzt das Stop-Event
"""
self.stop_event.set()
class MyFrame(wx.Frame):
def __init__(
self, parent = None, id = -1, title = "Example", size = wx.Size(350, 220)
):
wx.Frame.__init__(self, parent, id, title, size = size)
panel = wx.Panel(self)
vbox_main = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(vbox_main)
lab_message = wx.StaticText(panel)
vbox_main.Add(lab_message, 1, wx.EXPAND | wx.ALL, 10)
self.lab_message = lab_message
btn_start = wx.Button(panel, -1, "Start")
vbox_main.Add(btn_start, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALL, 10)
btn_start.Bind(wx.EVT_BUTTON, self.start_counter)
def start_counter(self, event = None):
progressdiag = PulseProgressDialog(parent = self)
progressdiag.start()
# Hier wird gearbeitet.
# Da allerdings nicht in einem eigenen Thread gearbeitet wird, blockiert
# diese Prozedur unter Windows, während man den Progressdialog mit der
# Maus verschiebt.
for i in range(30):
print str(i)
self.lab_message.SetLabel("Neuer Wert: %i" % i)
self.lab_message.Refresh()
wx.YieldIfNeeded() #Updatet die Prozessbar im Thread
time.sleep(0.2)
progressdiag.stop()
def main():
"""Testing"""
app = wx.PySimpleApp()
f = MyFrame()
f.Center()
f.Show()
app.MainLoop()
if __name__ == "__main__":
main()
HarryPython