Versuche gerade, als Python-Anfänger eine kleine Anwendung zu programmieren ...
Hauptsächlich soll sich das Teil im Taskbar einnisten, deswegen versuche ich rund um http://www.python-forum.de/viewtopic.ph ... 00#p151953 aus diversen Beispiel-Code-Stückchen was zusammenzuschustern. Beim Kenr der Anwendung, im Bsp. unten nicht enthalten, bin ich eigentlich ganz zufrieden wie ich damit voran komme ... Nur bei der kleinen GUI, die beim Erststart 2-3 Werte abfragen soll (und später als conf speichern soll, dann werden die Werte da nur noch angezeigt) und ansonsten nur paar Zeilen Text anzeigen soll, passen die geklauten Code-Schnippsel wohl irgendwie nicht so recht zusammen, jedenfalls passt die Gesamtgröße nicht und einiges ist grau hinterlegt.
Vermutlich nur 'ne Kleinigkeit, die man als Anfänger aber nicht sieht ...
Bei der Gelegenheit: Die Einheit für die Eingabefenster scheint Pixel zu sein. Wie kann man deren Größe auch in "Zeichen" angeben? Es schien so, als wäre das in einem Bsp. aus der Demo so dimensioniert. Aber deren Einbau funktionierte nicht, vielleicht wegen desselben Fehlers ...
Hier mal das gekürzte Progrämmle, das ausführbar sein sollte, sobald man ein anderes Icon statt xxx.xpm eingebaut hat:
Code: Alles auswählen
#!/usr/bin/python
# encoding: iso-8859-1
verbose = 1
TimerZeit = 2000 # msec
import sys
import wx
try :
f = open( pyitest.conf )
config = f.read( )
configured = 1
f.close( )
except :
configured = 0
###################################### Task Bar Icon #########################
class TaskbarIcon(wx.TaskBarIcon) :
def __init__( self, app ) :
global ItestTask
wx.TaskBarIcon.__init__( self )
self.app = app
self.SetIcon( wx.Icon( 'xxx.xpm', wx.BITMAP_TYPE_XPM ),
'abc\ndef' )
self.Bind( wx.EVT_MENU, self.OnTaskbarFrametoggle, id=1 )
self.Bind( wx.EVT_MENU, self.OnTaskbarClose, id=2 )
self.Bind( wx.EVT_TASKBAR_LEFT_DOWN, self.OnTaskbarFrametoggle )
ItestTask = self
def CreatePopupMenu( self ) :
menu = wx.Menu( )
menu.Append( 1, 'Show / Hide' )
menu.Append( 2, 'Close' )
return menu
def OnTaskbarFrametoggle( self, event ) :
if not self.app.frame.IsShown( ) :
self.app.frame.Show( )
else :
self.app.frame.Hide( )
def OnTaskbarClose( self, event ) :
try :
self.app.frame.Destroy( )
except :
print( 'Schon wech 1' )
try :
self.Destroy( )
except :
print( 'Schon wech 2' )
################################ Fenster ###################################
class Frame( wx.Frame ) :
def __init__( self, app, parent, id ) :
global ItestWin
ItestWin = self
wx.Frame.__init__( self, parent, id,
title = "PyItest",
pos = wx.DefaultPosition,
size = wx.DefaultSize,
style = wx.DEFAULT_DIALOG_STYLE )
#self.Centre( )
self.CreateStatusBar( )
self.sizer = wx.BoxSizer( wx.VERTICAL )
### Nachricht
if configured :
self.quote = wx.StaticText( self, -1, "Konfiguration:" )
else :
self.quote = wx.StaticText( self, -1,
"Erststart, bitte konfigurieren:" )
self.sizer.Add( self.quote, 0, wx.ALIGN_CENTRE | wx.ALL, 5 )
### IP-Adresse des Servers
self.sizer2 = wx.BoxSizer( wx.HORIZONTAL )
self.ipt = []
self.ipf = []
for i in range( 0, 4 ):
if i == 0 :
self.ipt.append( wx.StaticText( self, -1, "IP-Adresse:" ) )
self.sizer2.Add( self.ipt[i], 0, wx.ALIGN_CENTRE | wx.ALL, 5 )
else :
self.ipt.append( wx.StaticText( self, -1, "." ) )
self.sizer2.Add( self.ipt[i], 0, wx.ALIGN_CENTRE | wx.ALL, 5 )
self.ipf.append( wx.TextCtrl( self, -1, "", size = ( 30, -1 ) ) )
self.sizer2.Add( self.ipf[i], 1, wx.ALIGN_CENTRE | wx.ALL, 5 )
self.sizer.Add( self.sizer2, 0,
wx.GROW | wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5 )
### Intervall
self.sizer3 = wx.BoxSizer( wx.HORIZONTAL )
self.timert = wx.StaticText( self, -1, "Intervall:" )
self.sizer3.Add( self.timert, 0, wx.ALIGN_CENTRE | wx.ALL, 5 )
self.timerv = ( wx.TextCtrl( self, -1, str( TimerZeit), size = ( 50, -1)))
self.sizer3.Add( self.timerv, 1, wx.ALIGN_CENTRE | wx.ALL, 5 )
self.timeru = wx.StaticText( self, -1, "msec" )
self.sizer3.Add( self.timeru, 0, wx.ALIGN_CENTRE | wx.ALL, 5 )
self.sizer.Add( self.sizer3, 0,
wx.GROW | wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5 )
self.SetSizer( self.sizer )
self.SetAutoLayout( 1 )
self.sizer.Fit( self )
filemenu = wx.Menu( )
menuAbout = filemenu.Append( wx.ID_ABOUT, "&About",
"Information about this program" )
if configured :
menuExit = filemenu.Append( wx.ID_EXIT, "&Close", " Close Window" )
else :
menuExit = filemenu.Append( wx.ID_EXIT, "E&xit", " Close Window" )
menuBar = wx.MenuBar( )
menuBar.Append( filemenu, "&File" )
self.SetMenuBar( menuBar )
self.Bind( wx.EVT_MENU, self.OnAbout, menuAbout )
self.Bind( wx.EVT_MENU, self.OnExit, menuExit )
if configured :
self.Show( False )
else :
self.Show( True )
def OnExit( self, e ) :
if configured :
app.frame.Hide( )
else :
ItestTask.Destroy( )
ItestWin.Destroy( )
def OnAbout( self, e ) :
dlg = wx.MessageDialog( self, "A small text editor",
"About Sample Editor", wx.OK )
dlg.ShowModal( )
dlg.Destroy( )
############################# Gesamtanwendung ################################
class App( wx.App ) :
def OnInit( self ) :
self.frame = Frame( self, None, -1 )
self.taskb = TaskbarIcon( self )
return True
##############################################################################
ItestStatus = -1
app = App( 0 )
app.MainLoop( )