Sichtbarkeit von Items

Fragen zu Tkinter.
Antworten
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Jetzt aber eine Frage, die ins Tkinter Forum gehört.

Weiß jemand, ob es eine Option "unsichtbar" für Items eines Widgets gibt?
Würde gerne mit einem Checkbutton Teile einer Skizze aus- und einschalten können.

Grüße,
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

4bit hat geschrieben:Jetzt aber eine Frage, die ins Tkinter Forum gehört.

Weiß jemand, ob es eine Option "unsichtbar" für Items eines Widgets gibt?
Würde gerne mit einem Checkbutton Teile einer Skizze aus- und einschalten können.

Grüße,
Versuch doch mal, dich klarer auszudrücken ...

Falls es um ein Canvas geht, lautet die Antwort: Es gibt keine Option "unsichtbar", aber es gibt Möglichkeiten, so etwas faktisch zu implementieren.
Birne94
User
Beiträge: 90
Registriert: Freitag 28. November 2008, 15:18
Kontaktdaten:

Du könntest es für Canvas-Items so implementieren, dass du die Items aus der Sichtbaren Bereich verschiebst...

Oder ist sowas unsauber?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Birne94 hat geschrieben:Du könntest es für Canvas-Items so implementieren, dass du die Items aus der Sichtbaren Bereich verschiebst...

Oder ist sowas unsauber?
Unsauber IMHO nicht, aber nicht sonderlich elegant. Alternativen wären (wobei man über deren Eleganz auch verschiedener Ansicht sein kann ...):

Farbe auf "transparent" setzen (wobei ich jetzt grad nicht auswendig weiß, ob das bei alle Zeichenmethoden auf einem Canvas geht - für Polygone geht es z.B.).

Ein Basis-Item als Hintergrund setzen (z.B. rectangle in Canvas-Größe) und zum Unsichtbarmachen die Item-Priorität unter die des Basis-Items setzen.
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

@4bit:
Meinst Du sowas?

Code: Alles auswählen

#!/usr/bin/env python

####

import Tkinter as tk

####
  
class Gui(object):


  def __init__(self, width=400, height=400):

    self.root = tk.Tk()
    self.canvas = tk.Canvas(self.root, width=width, height=height, bg='white',
                            highlightthickness=None)
        
    self.canvas.pack(fill=tk.BOTH, expand=True)
    self.button = tk.Button(self.root, text='(In)Visible', command=self.showhide)
    self.button.pack()

    self.state = 1
    self.item = self.canvas.create_rectangle(33, 33, 250, 250, fill='red')


  def showhide(self):

    self.state ^= 1
    s = (tk.HIDDEN, tk.NORMAL)[self.state]
    self.canvas.itemconfig(self.item, state=s)

     
  def run(self):

    self.root.mainloop()

####

if __name__ == '__main__':

  Gui().run()
Habe grad mal eben im 'Effbot' nachgeschaut...
:wink:
yipyip
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

numerix hat geschrieben:Falls es um ein Canvas geht, lautet die Antwort: Es gibt keine Option "unsichtbar", aber es gibt Möglichkeiten, so etwas faktisch zu implementieren.
Das kommt davon, wenn man sich mal auf den "Shipman" verlässt ...
Also Korrektur Dank yipyip: Ja, es gibt eine Option unsichtbar. :wink:
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo yipyip

Danke für deine sehr brauchbare Feststellung!!! Ich schätze deine archäologischen Fähigkeiten. :)

@numerix: Ich bin leider auch stark Shipman-Fixiert

Gruss wuf :wink:
Take it easy Mates!
yipyip
User
Beiträge: 418
Registriert: Samstag 12. Juli 2008, 01:18

Hallo wuf,
da braucht man keine archäologischen Fähigkeiten,
da muss man einfach nur die Canvas-Seite im Effbot
richtig lesen (und verstehen). ;-)

Ich gebe zu, ich schaue erst immer im Effbot nach, nur
wenn mir das nicht ausreicht nochmal nach 'New Mexico'.
Im letzteren scheinen auch weniger Tippfehler drin zu sein,
aber der erstere ist ja ein fast unerschöpflicher Fundus.

:wink:
yipyip
4bit
User
Beiträge: 113
Registriert: Dienstag 5. Mai 2009, 11:27

Die Sichtbarkeit über itemconfig zu ändern ist schon bestechend einfach. Aber ein mit der Hintergrundfarbe des Canvas gefülltes Rechteck ist natürlich auch eine gute Idee.

Danke nochmals..
Antworten