Tkinter zu 100% Look and feel

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

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
Zuletzt geändert von pyStyler am Donnerstag 20. September 2007, 10:38, insgesamt 2-mal geändert.
Dwayne
User
Beiträge: 8
Registriert: Freitag 16. Februar 2007, 12:00

danke für diesen Hinweis! :)
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

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
pyStyler
User
Beiträge: 311
Registriert: Montag 12. Juni 2006, 14:24

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
ete
User
Beiträge: 218
Registriert: Montag 19. Februar 2007, 13:19
Kontaktdaten:

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
pudeldestodes
User
Beiträge: 65
Registriert: Samstag 9. Juni 2007, 23:45

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.
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

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.
pudeldestodes
User
Beiträge: 65
Registriert: Samstag 9. Juni 2007, 23:45

Der Vollständigkeit halber noch die Doku: hier.
Benutzeravatar
Ubuntuuser
User
Beiträge: 34
Registriert: Samstag 11. Februar 2006, 12:19
Wohnort: Augsburg

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
Antworten