Seite 1 von 1
labels in x und y richtung
Verfasst: Sonntag 19. Juni 2005, 17:23
von DDSD
Ich wollte fragen, wie ich es machen kann, damit ich eine bestimme anzahl von labels anzeigen lassen kann.
Ich will 20 in x und 20 in y richtung machen (also das so ein feld ensteht)
und dabei sollen die lables ned gleich heißen sondern mit pixel[zahl] heißen...
Wie kann ich das realisieren???
Verfasst: Sonntag 19. Juni 2005, 18:43
von mawe
Hi!
Solche Beispiele hatten wir schon öfters

Hier mal ein Snippet:
Code: Alles auswählen
from Tkinter import *
pixel = []
root = Tk()
for x in range(20):
for y in range(20):
pixel.append(
Label(
text="(%s-%s)" % (x,y),
bd=2,relief="groove",width=7))
pixel[-1].grid(row=x, column=y)
# Hintergrundfarbe bei einem der Label ändern
pixel[47].configure(bg="red")
root.mainloop()
Gruß, mawe
Verfasst: Sonntag 19. Juni 2005, 19:01
von DDSD
Irgendwie hängt sich das ganze auf.
Verfasst: Sonntag 19. Juni 2005, 19:20
von Mr_Snede
Bei mir läuft es - kannst du bitte die Fehlermeldung posten?
getestet auf:
debian testing
Python 2.3.5
cu Sebastian
Verfasst: Sonntag 19. Juni 2005, 19:32
von DDSD
gar keine Fehlermeldung...es hängt sich einfach auf, ohne das er irgendwas anzeigt

Wenn ich es mit dem IDLE von python mache.
Mit Doppelklick macht er einfach gar nix mehr
Wenn ich das ganze ohne meinen restlichen Programmcode probier, geht es auch...
Das ganze is unter Windows 2000
python 2.4.1
Werd mal schaun, mit was sich das ganze ned vertragen könnte
Verfasst: Sonntag 19. Juni 2005, 19:44
von mawe
Ich kann nur immer wieder sagen: Verwende idle nicht. Schon gar nicht wenn Du Tk-Anwendungen daraus starten willst. idle ist selbst eine Tk-Anwendung und es kommt dann leider zu Konflikten, weil ja idle selbst in einer Tk-mainloop läuft, dann wird ein 2. mal
Tk() aufgerufen, ... das ist immer schlecht

Verfasst: Sonntag 19. Juni 2005, 19:48
von DDSD
Hat sich erledigt, hab den Fehler gefunden
Es geht aber trotzdem mit IDLE
Aber eine Frage zu mainloop hab i noch.
Kann i das öffters reingeben oder ned???
Weil wenn ichs nach der Funktion mach, dann macht er mir kein Menü und Statusbar rein
Und dann halt noch wie ich das machen kann, das ich bei Klick mit der Maus auf das Label die Farbe ändern kann...
Wie ich dabei die Labelnummer mitübergeben kann.
Verfasst: Montag 20. Juni 2005, 10:44
von mawe
Hi!
DDSD hat geschrieben:
Aber eine Frage zu mainloop hab i noch.
Kann i das öffters reingeben oder ned???
Weil wenn ichs nach der Funktion mach, dann macht er mir kein Menü und Statusbar rein
Was meinst Du? Zeig mal den Code.
DDSD hat geschrieben:
Und dann halt noch wie ich das machen kann, das ich bei Klick mit der Maus auf das Label die Farbe ändern kann...
Zum Beispiel so:
Code: Alles auswählen
from Tkinter import *
def click(w):
w.configure(bg="red")
pixel = []
root = Tk()
for x in range(20):
for y in range(20):
pixel.append(
Label(
text="(%s-%s)" % (x,y),
bd=2,relief="groove",width=7))
pixel[-1].grid(row=x, column=y)
pixel[-1].bind("<Button-1>", lambda event, w=pixel[-1] : click(w))
pixel[47].configure(bg="red")
root.mainloop()
Gruß, mawe
Verfasst: Montag 20. Juni 2005, 15:45
von DDSD
Erst mal Danke für die Hilfe oder besser für den Code *fg*
Ich werd mir das jetzt mal selbst anschaun und wenn i wirklich nimmer weiterkomm, wiederkommen (bzw. wiederposten, kommen tu i sicher wieder) ;P
I gebs nach so kurzer Zeit auf *fg*
Hier der Code 'bildbearbeitung.pyw':
Code: Alles auswählen
# -*- coding: cp1252 -*-
from Tkinter import *
from ScrolledText import *
from tkMessageBox import *
from tkSimpleDialog import *
from tkFileDialog import *
from tkColorChooser import *
version = "0.1"
author = "Dustin Steiner"
copyright = "(c) 2005 by " + author
colorclick = 0
root = Tk()
root.title("Bildbearbeitung " + copyright)
def newdatei():
newdatei=askstring('Neue Datei...', 'Pixel eingeben', initialvalue='20x20')
def opendatei():
opendatei = askopenfilename(title="Öffne Datei...", defaultextension="*.dus", filetypes=[("Dus Grafikformat","*.dus")], parent=root)
try:
readopen = open(opendatei,"r")
except:
showwarning("Datei öffnen", "Kann die Datei %s nicht öffnen."%opendatei)
status.set("Datei wurde geöffnet")
zeilenanzahl=readopen.readline()
zeilen=0
for z in zeilenanzahl:
zeilen+=1
readopen.seek(0)
openpixelX=readopen.readline()
openpixelY=readopen.readline()
i=0
openpixel = []
x=1
y=1
for j in range(1,zeilen):
opencolor=readopen.readline()
openpixel.append(
Label(
text="(%s-%s)" % (i,j),
bd=2,relief="groove",width=5,height=5,bg=opencolor[:-1]))
openpixel[-1].grid(row=x, column=y)
x+=1
y+=1
readopen.seek(0)
readopen.close()
def savedatei():
savedatei = asksaveasfilename(title="Speichern als...", defaultextension="*.dus", filetypes=[("Dus Grafikformat","*.dus")], parent=root)
def colorwahl():
color = askcolor(parent=root, title= "Farbwahl", initialcolor="#000000")
if(color != ""):
colorclick = 1
def about():
aboutmessage = "Bildbearbeitung v " + version + "\n" + copyright + "\n\n" + "Bitte prüfe oft auf neue Versionen unter: http://steinersoft.at.tt"
showinfo(title="About", message=aboutmessage, parent=root)
def pixelclick(w):
if(colorclick==0):
color = "#000000"
w.configure(bg=color)
pixel = []
for x in range(1,21):
for y in range(1,21):
pixel.append(
Label(
text="(%s-%s)" % (x,y),
bd=2,relief="groove",width=7))
pixel[-1].grid(row=x, column=y)
pixel[-1].bind("<Button-1>", lambda event, w=pixel[-1] : pixelclick(w))
class StatusBar(Frame):
def __init__(self,master):
Frame.__init__(self,master)
self.label=Label(self, bd=1, relief=SUNKEN, anchor=W)
self.label.pack(fill=X)
def set(self, format):
self.label.config(text=format)
self.label.update_idletasks()
def clear(self):
self.label.config(text="")
self.label.update_idletasks()
status=StatusBar(root)
status.pack(side=BOTTOM, fill=X)
status.set("Bildbearbeitung wurde gestartet")
menuobj=Menu(root)
root.config(menu=menuobj)
dateimenu=Menu(menuobj)
menuobj.add_cascade(label="Datei", menu=dateimenu)
dateimenu.add_command(label="Neue Datei", command=newdatei)
dateimenu.add_command(label="Öffnen", command=opendatei)
dateimenu.add_command(label="Speichern", command=savedatei)
dateimenu.add_separator()
dateimenu.add_command(label="Beenden", command=root.destroy)
colormenu=Menu(menuobj)
menuobj.add_cascade(label="Farbwahl", menu=colormenu)
colormenu.add_command(label="Farbwahl", command=colorwahl)
helpmenu=Menu(menuobj)
menuobj.add_cascade(label="Hilfe", menu=helpmenu)
helpmenu.add_command(label="About", command=about)
root.mainloop()
Verfasst: Dienstag 5. Juli 2005, 19:52
von jAN
bei mir funzt das net so richtig
Verfasst: Samstag 15. Juli 2006, 21:42
von DDSD
Deshalb habe ich ja gefragt, warum es nicht wirklich geht...
Verfasst: Sonntag 16. Juli 2006, 09:28
von jAN
Oh ich ahb den Fehler gefunden:
Du verwendest zwei verschiedene Layout-Manager in einem Frame:
Abhilfe:
statt:
Code: Alles auswählen
status=StatusBar(root)
status.pack(side=BOTTOM, fill=X)
status.set("Bildbearbeitung wurde gestartet")
das:
Code: Alles auswählen
status=StatusBar(root)
status.grid(column=1,columnspan=20)
status.set("Bildbearbeitung wurde gestartet")
Verfasst: Samstag 24. März 2007, 22:24
von DDSD
So, bin wieder einmal am Python-Programmieren und hab jetzt das mal geändert

Danke, jetzt geht es.
Programm geht auch halb so wie ich es will, also es geht genau wie ich es will, nur Save un Open is no ned drinnen

Verfasst: Sonntag 25. März 2007, 13:09
von DDSD
Das Programm ist fertig

Vl. wäre es noch gut, wenn ich den Code vl. bissi säubere...da ist bestimmt einiges an Müll drinnen.
Aber wenigstens funktioniert es, zwar Sinnlosprogramm, aber es geht
