Hallo loggod
Noch eine Frage zum Code-Snippet, welches du in deinem ersten Post vorgestellt hast. Ist dies dein Original Skript? Weil da hat es Einrück-Fehler drin. Ist dies eventuell beim transverieren ins Forum passiert?
Noch ein Tipp:
Bei der Konfiguration der Grid-Layout-Manager Anweisungen würde ich die 'sticky'-Option mit dem Wert 'nesw' belegen damit das betreffende Button-Widget das ganze Grid-Feld ausfüllt.
Gruss wuf
Button event auslösen solange linke Maustaste gedrückt ist
Das Problem ist auch weniger das Erstellen optisch ansprechender Buttons/Icons, sondern der Export in das GIF-Format mit seiner Beschränkung auf 256 Farben. Ich habe schon manches schöne Icon als png gehabt und nach der Konvertierung nach gif konnte man es wegschmeißen, weil z.B. sanfte Kantenübergänge und Farbverläufe nicht mehr so fein dargestellt werden konnten.wuf hat geschrieben:Aber GIMP hat noch einige Zusätze (Plugin's) die es einem ermöglichen eigene Kunstwerke zu erstellen und als .gif's zu exportieren.
Hallo numerix
Hast du schon eimal versucht das PIL-Packet für die Darstellung von Bilder einzusetzen. Zum Beispiel für ein Icon im .png-Format. Das PIL-Packet enthält ein Modul 'ImageTk' die sich hierfür eignet.
Hier ein kleines Testprogramm:
Der Output für mein Bildchen 'archive.png':
Gruss wuf
Hast du schon eimal versucht das PIL-Packet für die Darstellung von Bilder einzusetzen. Zum Beispiel für ein Icon im .png-Format. Das PIL-Packet enthält ein Modul 'ImageTk' die sich hierfür eignet.
Hier ein kleines Testprogramm:
Code: Alles auswählen
import Tkinter as tk
import Image
import ImageTk
test_window = tk.Tk()
pil_icon = Image.open("archive.png")
pil_icon_1 = pil_icon.rotate(45)
pil_icon_2 = pil_icon.resize((70,70))
tk_icon = ImageTk.PhotoImage(pil_icon)
tk_icon_1 = ImageTk.PhotoImage(pil_icon_1)
tk_icon_2 = ImageTk.PhotoImage(pil_icon_2)
button = tk.Button(test_window, image=tk_icon)
button.pack(side='left')
button = tk.Button(test_window, image=tk_icon_1)
button.pack(side='left')
button = tk.Button(test_window, image=tk_icon_2)
button.pack(side='left')
test_window.mainloop()
Gruss wuf
Take it easy Mates!
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
True-Color GIFs anyone? (Infos dazu)numerix hat geschrieben:Export in das GIF-Format mit seiner Beschränkung auf 256 Farben.
Aber gut, davon abgesehen ist GIF sowieso am besten durch PNG zu ersetzen und damit hat es sich.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Interessant (und für mich neu). Habe eben ein bisschen damit herumgespielt und es scheint doch eher amüsant als ernsthaft praktikabel. Bei der Umwandlung in eine png-Datei hat mir mein Konverter (kim) 173(!) png-Dateien produziert, jede mit einzelnen Teilen der GIF-Datei ...Leonidas hat geschrieben:True-Color GIFs anyone? (Infos dazu)numerix hat geschrieben:Export in das GIF-Format mit seiner Beschränkung auf 256 Farben.
Aber gut, davon abgesehen ist GIF sowieso am besten durch PNG zu ersetzen und damit hat es sich.
(Mittels gimp habe ich dann konvertieren können)
Man könnte also sagen: Theoretisch gibt es True-Color-GIFs, praktisch kann man sie eigentlich nicht gebrauchen. Und wie du schon selbst gesagt hast: png statt gif sollte die Lösung sein.
@wuf: Ja, ich habe mal mit PIL und Tkinter experimentiert. Was mir daran nicht gefällt ist zum einen, dass ich PIL zusätzlich einsetzen muss und zum anderen, dass es nach meinem Kenntnisstand nicht möglich ist, wie bei gif-Dateien diese über base64-Encoding (oder auch sonstwie) in den Quelltext zu integrieren, was ich immer dann gerne einsetze (in ein extra Modul ausgelagert, weil es eigentlich ja wirklich hässlich ist), wenn ich vorhabe, ein exe-File daraus zu machen, das zur Weitergabe an andere bestimmt ist, weil man dann wirklich alles in einer Datei hat und auch der Dümmste nix mehr falsch machen kann.
Aber vielleicht gibt es ja doch einen Weg, so etwas auch mit png-Grafiken zu realisieren?
Hi Zusammen,
ich wollte mich nur nochmal für das Rege Interesse und die vielen Antworten bedanken.
@wuf: Die Icons im RAW Format direkt einzubinden und nicht auf nen OS Iconset zuzugreifen, finde ich sehr cool .Bestes Forum ever! .. Hier gefällts mir.
Dank euch. Also dann:...Bis zum nächsten Post!
Gruß,
loggod
ich wollte mich nur nochmal für das Rege Interesse und die vielen Antworten bedanken.
@wuf: Die Icons im RAW Format direkt einzubinden und nicht auf nen OS Iconset zuzugreifen, finde ich sehr cool .Bestes Forum ever! .. Hier gefällts mir.
Dank euch. Also dann:...Bis zum nächsten Post!
Gruß,
loggod
Hi,
das hab ich schlußendlich draus gebastelt um nochmal zu zeigen was ich an funktionalität haben wollte
PS (@wuf): ich benutze ubuntu + gedit als editor. Irgendwas scheint mit den Einrückungen nicht zu stimmen, wenn ich den code hier in einfüge:(
Gruß,
loggod
das hab ich schlußendlich draus gebastelt um nochmal zu zeigen was ich an funktionalität haben wollte
Code: Alles auswählen
#! /usr/bin/env python
# -*- coding: utf-8
import Tkinter as tk
import threading
import time
from ScrolledText import *
class navpad(object):
def __init__(self):
self.mainForm = tk.Tk()
self.mainFrame = tk.Frame (self.mainForm)
self.mainFrame.grid(row=1,column=0)
self.mainFrame2 = tk.Frame (self.mainForm)
self.mainFrame2.grid(row=0,column=0)
self.textfenster=ScrolledText(self.mainFrame2)
self.textfenster.grid(row=0, column=1)
self.buttonNameHL = tk.Button(self.mainFrame,text='HL',command=None)
self.buttonNameHL.grid(row=1,column=1,sticky= 'nesw')
self.buttonNameHL.bind('<Button-1>',lambda event, name='hoch links': self.button1_press(event, name))
self.buttonNameHL.bind('<ButtonRelease-1>',lambda event, name='hoch links': self.button1_release(event, name))
self.buttonNameHO = tk.Button(self.mainFrame,text='HO',command=None)
self.buttonNameHO.grid(row=1,column=2,sticky= 'nesw')
self.buttonNameHO.bind('<Button-1>',lambda event, name='hoch': self.button1_press(event, name))
self.buttonNameHO.bind('<ButtonRelease-1>',lambda event, name='hoch': self.button1_release(event, name))
self.buttonNameHR = tk.Button(self.mainFrame,text='HR',command=None)
self.buttonNameHR.grid(row=1,column=3,sticky= 'nesw')
self.buttonNameHR.bind('<Button-1>',lambda event, name='hoch rechts': self.button1_press(event, name))
self.buttonNameHR.bind('<ButtonRelease-1>',lambda event, name='hoch rechts': self.button1_release(event, name))
self.buttonNameLI = tk.Button(self.mainFrame,text='LI',command=None)
self.buttonNameLI.grid(row=2,column=1,sticky= 'nesw')
self.buttonNameLI.bind('<Button-1>',lambda event, name='links': self.button1_press(event, name))
self.buttonNameLI.bind('<ButtonRelease-1>',lambda event, name='links': self.button1_release(event, name))
self.buttonNameRE = tk.Button(self.mainFrame,text='RE',command=None)
self.buttonNameRE.grid(row=2,column=3,sticky= 'nesw')
self.buttonNameRE.bind('<Button-1>',lambda event, name='rechts': self.button1_press(event, name))
self.buttonNameRE.bind('<ButtonRelease-1>',lambda event, name='rechts': self.button1_release(event, name))
self.buttonNameRL = tk.Button(self.mainFrame,text='RL',command=None)
self.buttonNameRL.grid(row=3,column=1,sticky= 'nesw')
self.buttonNameRL.bind('<Button-1>',lambda event, name='runter links': self.button1_press(event, name))
self.buttonNameRL.bind('<ButtonRelease-1>',lambda event, name='runter links': self.button1_release(event, name))
self.buttonNameRU = tk.Button(self.mainFrame,text='RU',command=None)
self.buttonNameRU.grid(row=3,column=2,sticky= 'nesw')
self.buttonNameRU.bind('<Button-1>',lambda event, name='runter': self.button1_press(event, name))
self.buttonNameRU.bind('<ButtonRelease-1>',lambda event, name='runter': self.button1_release(event, name))
self.buttonNameRR = tk.Button(self.mainFrame,text='RR',command=None)
self.buttonNameRR.grid(row=3,column=3,sticky= 'nesw')
self.buttonNameRR.bind('<Button-1>',lambda event, name='runter rechts': self.button1_press(event, name))
self.buttonNameRR.bind('<ButtonRelease-1>',lambda event, name='runter rechts': self.button1_release(event, name))
self.mainForm.title("navpad_test")
self.mainForm.mainloop()
def button1_press(self, event, name):
self.flag = True
self.thread = threading.Thread(target=self.workThread, args=(name, ))
self.thread.start()
def button1_release(self, event, name):
self.flag = False
def workThread(self,name):
count = 0
while self.flag:
outtxt = name+ ":(" +str(count) +" X)"+"\n"
self.textfenster.insert(0.0, outtxt)
time.sleep(0.05)
count +=1
self.textfenster.delete('1.0',END)
navpad()
Gruß,
loggod
@loggod: Der Python Style Guide empfiehlt vier Leerzeichen pro Ebene und keine Tabs zu verwenden.
Hallo loggod
Funktioniert ja bestens! Wegen dem Einrücken würde ich einmal die Ratschläge von 'BlackJack' befolgen. Da würde ich noch ein bisschen herumexperimentieren. Du kannst ja in userem Sub-Forum 'Just Testing' ausprobieren ob beim transferieren deines Skripts alles korrekt abläuft. Nicht vergessen von Zeit zu Zeit im Style-Guide PEP-8 reinschauen.
Gruss wuf
Funktioniert ja bestens! Wegen dem Einrücken würde ich einmal die Ratschläge von 'BlackJack' befolgen. Da würde ich noch ein bisschen herumexperimentieren. Du kannst ja in userem Sub-Forum 'Just Testing' ausprobieren ob beim transferieren deines Skripts alles korrekt abläuft. Nicht vergessen von Zeit zu Zeit im Style-Guide PEP-8 reinschauen.
Gruss wuf
Take it easy Mates!
Hallo loggod !
Habe mal die Buttons ueber eine Schleife generiert und das Modul "threading" hreausgenommen.
http://paste.pocoo.org/show/91334/
gruss frank
Habe mal die Buttons ueber eine Schleife generiert und das Modul "threading" hreausgenommen.
http://paste.pocoo.org/show/91334/
gruss frank
Hallo loggod !
Habe es mal mit einem bewegten Punkt auf einem Canvas gemacht.
http://paste.pocoo.org/show/91349/
gruss frank
Habe es mal mit einem bewegten Punkt auf einem Canvas gemacht.
http://paste.pocoo.org/show/91349/
gruss frank
Hallo loggod,
Du solltest doch keine Threads verwenden (...grrmbl...).
Wenn man das nicht richtig macht, geht das schief, wie
ich aus eigener (leidvoller) Erfahrung weiss.
Bei meinem Chatprogramm mit Tkinter und Threads
kam es sporadisch zu Segfaults, merkwürdigerweise
nur auf meinem Xubuntu-Rechner, nicht auf den XP-Rechnern
der anderen Teilnehmer.
Nachdem ich das Konzept aus
http://effbot.org/zone/tkinter-threads.htm
übernommen hatte, war das Problem behoben.
Habe kaytec's 1.Demo nochmal um eine
andere Funktionalität erweitert.
Jetzt stoppt der Zähler, wenn der Mauszeiger
den Button verlässt und läuft weiter wenn
der Mauszeiger wieder darüberfährt.
(Kommt natürlich immer drauf an, wie man's haben will)
http://paste.pocoo.org/show/91385/
The ten commandments:
1. Thou shalt not call the gui from another thread.
2. Thou shalt use lists and loops.
3. Thou shalt use lists and loops.
4. Thou shalt...
...
yipyip
Du solltest doch keine Threads verwenden (...grrmbl...).
Wenn man das nicht richtig macht, geht das schief, wie
ich aus eigener (leidvoller) Erfahrung weiss.
Bei meinem Chatprogramm mit Tkinter und Threads
kam es sporadisch zu Segfaults, merkwürdigerweise
nur auf meinem Xubuntu-Rechner, nicht auf den XP-Rechnern
der anderen Teilnehmer.
Nachdem ich das Konzept aus
http://effbot.org/zone/tkinter-threads.htm
übernommen hatte, war das Problem behoben.
Habe kaytec's 1.Demo nochmal um eine
andere Funktionalität erweitert.
Jetzt stoppt der Zähler, wenn der Mauszeiger
den Button verlässt und läuft weiter wenn
der Mauszeiger wieder darüberfährt.
(Kommt natürlich immer drauf an, wie man's haben will)
http://paste.pocoo.org/show/91385/
The ten commandments:
1. Thou shalt not call the gui from another thread.
2. Thou shalt use lists and loops.
3. Thou shalt use lists and loops.
4. Thou shalt...
...
yipyip