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 :P

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 :)