labels in x und y richtung

Fragen zu Tkinter.
DDSD

labels in x und y richtung

Beitragvon DDSD » Sonntag 19. Juni 2005, 17:23

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

Beitragvon mawe » Sonntag 19. Juni 2005, 18:43

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

Beitragvon DDSD » Sonntag 19. Juni 2005, 19:01

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

Beitragvon Mr_Snede » Sonntag 19. Juni 2005, 19:20

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

getestet auf:
debian testing
Python 2.3.5

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

Beitragvon DDSD » Sonntag 19. Juni 2005, 19:32

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

Beitragvon mawe » Sonntag 19. Juni 2005, 19:44

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

Beitragvon DDSD » Sonntag 19. Juni 2005, 19:48

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

Beitragvon mawe » Montag 20. Juni 2005, 10:44

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

Beitragvon DDSD » Montag 20. Juni 2005, 15:45

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:

Beitragvon jAN » Dienstag 5. Juli 2005, 19:52

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

Beitragvon DDSD » Samstag 15. Juli 2006, 21:42

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:

Beitragvon jAN » Sonntag 16. Juli 2006, 09:28

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

Beitragvon DDSD » Samstag 24. März 2007, 22:24

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

Beitragvon DDSD » Sonntag 25. März 2007, 13:09

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder