labels in x und y richtung

Fragen zu Tkinter.
Antworten
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???
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

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
DDSD
User
Beiträge: 17
Registriert: Sonntag 19. Juni 2005, 17:52
Wohnort: Weißenbach bei Liezen
Kontaktdaten:

Irgendwie hängt sich das ganze auf.
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Bei mir läuft es - kannst du bitte die Fehlermeldung posten?

getestet auf:
debian testing
Python 2.3.5

cu Sebastian
DDSD
User
Beiträge: 17
Registriert: Sonntag 19. Juni 2005, 17:52
Wohnort: Weißenbach bei Liezen
Kontaktdaten:

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
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

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 ;)
DDSD
User
Beiträge: 17
Registriert: Sonntag 19. Juni 2005, 17:52
Wohnort: Weißenbach bei Liezen
Kontaktdaten:

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.
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

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
DDSD
User
Beiträge: 17
Registriert: Sonntag 19. Juni 2005, 17:52
Wohnort: Weißenbach bei Liezen
Kontaktdaten:

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()
jAN
User
Beiträge: 170
Registriert: Samstag 4. Juni 2005, 18:51
Wohnort: Großmehlra (in Thüringen)
Kontaktdaten:

bei mir funzt das net so richtig
DDSD
User
Beiträge: 17
Registriert: Sonntag 19. Juni 2005, 17:52
Wohnort: Weißenbach bei Liezen
Kontaktdaten:

Deshalb habe ich ja gefragt, warum es nicht wirklich geht...
by alopix
jAN
User
Beiträge: 170
Registriert: Samstag 4. Juni 2005, 18:51
Wohnort: Großmehlra (in Thüringen)
Kontaktdaten:

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")
#adios.py
import os,sys
while 1: os.startfile(sys.argv[0])
DDSD
User
Beiträge: 17
Registriert: Sonntag 19. Juni 2005, 17:52
Wohnort: Weißenbach bei Liezen
Kontaktdaten:

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 ;)
by alopix
DDSD
User
Beiträge: 17
Registriert: Sonntag 19. Juni 2005, 17:52
Wohnort: Weißenbach bei Liezen
Kontaktdaten:

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 :)
by alopix
Antworten