Seite 1 von 1

Sichtbarkeit von Items

Verfasst: Mittwoch 6. Mai 2009, 13:59
von 4bit
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,

Re: Sichtbarkeit von Items

Verfasst: Mittwoch 6. Mai 2009, 15:16
von numerix
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.

Verfasst: Mittwoch 6. Mai 2009, 16:52
von Birne94
Du könntest es für Canvas-Items so implementieren, dass du die Items aus der Sichtbaren Bereich verschiebst...

Oder ist sowas unsauber?

Verfasst: Mittwoch 6. Mai 2009, 17:47
von numerix
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.

Verfasst: Mittwoch 6. Mai 2009, 18:12
von yipyip
@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

Re: Sichtbarkeit von Items

Verfasst: Mittwoch 6. Mai 2009, 19:19
von numerix
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:

Verfasst: Mittwoch 6. Mai 2009, 19:34
von wuf
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:

Verfasst: Mittwoch 6. Mai 2009, 19:46
von yipyip
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

Verfasst: Donnerstag 7. Mai 2009, 10:14
von 4bit
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..