Seite 1 von 1

Tkinter zu 100% Look and feel

Verfasst: Donnerstag 20. September 2007, 10:29
von pyStyler
Hallo Zusammen,

nun wie soll ich es sagen - ich mag an Tkinter einfache alles auch ohne Native Look and feel. Um es kurz zu machen!
Es geht doch.

schritte:
1)
http://sourceforge.net/project/showfile ... p_id=11464
runterladen, entpacken und ins C:\Python24(25)\tcl kopieren das ist alles.

2)
Code testen

Code: Alles auswählen

from Tkinter import * 

class Taschenrechner(Frame):
    def __init__(self,master=None):
        Frame.__init__(self, master)
        self.pack(expand=YES, fill=BOTH)   
       
        self.stringvar = StringVar()
        self.entry=Entry(self, 
                                textvariable=self.stringvar, 
                                font=('tahoma',40,'bold') )
        self.entry.pack(side=TOP, expand=NO, 
                            fill=BOTH, 
                            padx=10, pady=10)
                    
        for tasten in ('789/', '456*','123-', '.0+='):
            self.frame1=Frame(self)
            self.frame1.pack(side=TOP, expand=YES, fill=BOTH, padx=10)
            for zeichen in tasten:
                self.b=Button(self.frame1,
                                text=zeichen,
                                command=lambda z=zeichen,
                                var=self.stringvar, : var.set(var.get() + z))
                self.b.pack(side=LEFT, expand=YES, fill=BOTH)
                
            if zeichen == '=':
                self.b.configure(command=self.rechnen)
        
    def rechnen(self):
        rec = str(eval(self.stringvar.get()))
        self.entry.delete(0, END)
        self.entry.insert(END, str( rec))
        
def _main():
    
    root=Tk()
    root.tk.call('package', 'require', 'tile')
    root.tk.call('namespace', 'import', '-force','ttk::*')
    root.tk.call('tile::setTheme', 'xpnative')
    
    ta = Taschenrechner(root)
    
    Button(root,text='loeschen',
                command=lambda var=ta.stringvar: 
                var.set('')).pack(fill=X, padx=10, pady=10)
                
  
    root.geometry('550x500+250+250')
    
    root.mainloop()
    
if __name__=='__main__':
    _main()
    
    
Viel spass dabei.

Gruss
pyStyler

Verfasst: Montag 24. September 2007, 14:20
von Dwayne
danke für diesen Hinweis! :)

Verfasst: Mittwoch 26. September 2007, 07:35
von ete
Danke für den Link!

Gibts dafür auch eine Doku? Ich hab z.B. nicht herausgefunden wie ich die Tools importiere bzw. in Python aufrufe. Vielleicht kann mal kurz jemand ein Beispiel zeigen, mit ner ComboBox oder so. Die mitgelieferten Infos sind nicht wirklich selbsterklärend (für mich).

Wäre nett, Sorry wegen Newbie Frage :?

Stefanie

Verfasst: Mittwoch 26. September 2007, 08:57
von pyStyler
Hallo ete,

hier der Tilewrapper von Kevin Walzer.
http://tkinter.unpythonic.net/wiki/TileWrapper
Kopiere dir den Sourcecode von obigen Link und speichere es unter "C:\Python24\Lib\site-packages
oder C:\Python25\Lib\site-packages" als
Tilewrapper.py

dann testen

Code: Alles auswählen

import Tilewrapper  
import Tkinter

def _main():
    
    root = Tkinter.Tk()
    root.tk.call('package', 'require', 'tile')
    
    # Tile Combobox
    cmb = Tilewrapper.Combobox(root)
    cmb.pack(fill=Tkinter.X, padx=5, pady=5)
    
    # Tkinter Button 
    btn = Tkinter.Button(root, text='Button')
    btn.pack(fill=Tkinter.X, padx=5, pady=5)
    
    #Tile Button 
    btnTile = Tilewrapper.Button(root, text='Tile Button')
    btnTile.pack(fill=Tkinter.X, padx=5, pady=5)
    
    #tkinter entry
    tkEntry = Tkinter.Entry(root)
    tkEntry.pack(fill=Tkinter.X, padx=5, pady=5)
    
    #tile entry
    tileEntry = Tilewrapper.Entry(root)
    tileEntry.pack(fill=Tkinter.X, padx=5, pady=5)
    
    #tkinter checkbutton
    tkCheckbutton = Tkinter.Checkbutton(root)
    tkCheckbutton.pack(fill=Tkinter.X, padx=5, pady=5, side=Tkinter.LEFT)
    
    #tile checkbutton
    tileCheckbutton = Tilewrapper.Checkbutton(root)
    tileCheckbutton.pack(fill=Tkinter.X, padx=5, pady=5)
    
    # und so weiter......
    # Tkinter.Frame......
    # Tile.Frame.........
    
    root.mainloop()
    
_main()
wenn du nicht klar kommst, ruhig fragen.


Gruss
pyStyler

Verfasst: Mittwoch 26. September 2007, 10:14
von ete
Vielen Dank, jetzt Blick ich durch :D

Coole Sache, ich mag Tkinter und wollte (noch) nicht zu wx wechseln, nur weils keine ComboBox gibt...

Liebe Grüsse

Stefanie

Verfasst: Montag 14. Januar 2008, 00:38
von pudeldestodes
Ich möchte nur kurz anmerken, dass das unter Linux tatsächlich Balsam für die Augen ist und danke für die Anleitung!

Klappt unter Ubuntu auch hervorragend mit der Installation: einfach Tile-Sourcen herunterladen, und das übliche configure, make, checkinstall durchhauen. Der Tilewrapper muss entsprechend nach /usr/lib/python2.5/site-packages/.

Bei deinem ersten Beispiel muss man halt xpnative durch z.B. clam ersetzen.

Verfasst: Dienstag 15. Januar 2008, 21:19
von Mr_Snede
Unter debian Lenny(aktuell testing) hat es gereicht das Paket "tk-tile" zu installieren.
Das Paket ist leider nicht in Etch(aktuell stable) enthalten.

Edit:
Das XP-Theme scheint nicht im Paket enthalten zu sein - ein Schelm wer Böses dabei denkt ;-)

Der Taschenrechner funktioniert, wenn man die Zeile 39 gegen:

Code: Alles auswählen

    root.tk.call('tile::setTheme', 'clam')
austauscht.

"classic" funktioniert auch, "aqua" dagegen nicht, obwohl Dateien dafür vorhanden sind.

Verfasst: Mittwoch 16. Januar 2008, 16:48
von pudeldestodes
Der Vollständigkeit halber noch die Doku: hier.

Verfasst: Samstag 2. Februar 2008, 17:10
von Ubuntuuser
Mr_Snede hat geschrieben:Unter debian Lenny(aktuell testing) hat es gereicht das Paket "tk-tile" zu installieren.
Das Paket ist leider nicht in Etch(aktuell stable) enthalten.

Edit:
Das XP-Theme scheint nicht im Paket enthalten zu sein - ein Schelm wer Böses dabei denkt ;-)

Der Taschenrechner funktioniert, wenn man die Zeile 39 gegen:

Code: Alles auswählen

    root.tk.call('tile::setTheme', 'clam')
austauscht.

"classic" funktioniert auch, "aqua" dagegen nicht, obwohl Dateien dafür vorhanden sind.
Hallo, ich probiere auch mit dem Paket aus,leider habe ich immer den Ausgabefehler

Code: Alles auswählen

 root.tk.call('tile::setTheme', 'aqua')
TclError: can not find channel named "stderr
egal welchen style ich da anwende... was kann ich denn daran ändern?
ohne den code funktioniert es ja, aber mit tile::setTheme nicht..danke für tips im vorraus...

ubuntuuser