probleme mit einem about fenster...

Fragen zu Tkinter.
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

Donnerstag 15. Januar 2004, 20:21

hi!
ich habe ein problem das ich auch bei "akkgemein" hätte posten können:

ich habe eine datei "about.py"

Code: Alles auswählen

#! Python
# -*- coding: iso-8859-1 -*-

# about.py

from Tkinter import *

def ende():
    fenster.destroy()

fenster = Tk()
fenster.title('About...')

content = """
bla
bla
bla
...
...
...
"""

text_label = Label(fenster, text = content)
text_label.pack()

ende_button = Button(fenster, text = "OK", command = ende)
ende_button["height"] = 1
ende_button["width"] = 12
ende_button["border"] = 3
ende_button.pack()

diese datei wird in der hauptdatei import.

allerdings in einer funktion.

d.h. in der hauptdatei ist ein button(command = info) und die funktion dafür sieht so aus:

Code: Alles auswählen

def info():
      import about
      about.fenster.mainloop()

wenn ich nun die datei öffne und auf den about button klicke funktioniert alles wunderbar, das about fenster öffnet sich.

wenn ich es jedoch schließe (OK Button, funktion:  fenster.destroy() )
und dann nochmal auf den about button klicke passiert gar nix!
ich muss das programm zuert wieder schließen. :? 

wie kann ich das beheben?

Danke schonmal jetzt

DER Olf
hans
User
Beiträge: 728
Registriert: Sonntag 22. September 2002, 08:32
Wohnort: Sauerland
Kontaktdaten:

Donnerstag 15. Januar 2004, 21:41

Kenne zwar TKInter nicht aber ich glaub ich hab die Lösung.

mit fenster = TK() erzeugst du ein neues Fenster, welches du mit fenster.show(), oder wie auch immer, angezeigst bekommst. Beim Schließen darfst du das Fenster aber nicht zestören (.....destroy) sondern nur unsichtbar machen. In Delphi gibt's da die Methoden show() und hide(). Ich kann mir vorstellen, dass es in TKInter ähnlich ist.

Hans
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

Freitag 16. Januar 2004, 10:46

ich hab in der Pythonwin hilfe hide_form() und show_form( placement, bordertype, name) gefunden.

jedoch funktioniert beides nicht. show_form hat keine weiteren parameter, aber wenn ichdas programm starte bekomme ich diese fehlermeldung:

global name 'show_form' is not defined

kann mir jemand was genaueres sagen?? :(
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Freitag 16. Januar 2004, 14:19

Hi DER Olf,

versuchs mal mit window.withdraw() und window.deiconify(), siehe auch TKinter Window Visibility Methods


Gruß

Dookie
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

Freitag 16. Januar 2004, 14:27

hmm....dann passiert gor nix mehr... :?
Benutzeravatar
wuf
User
Beiträge: 1492
Registriert: Sonntag 8. Juni 2003, 09:50

Freitag 16. Januar 2004, 23:40

Hi OLF

Hier eine mögliche Lösung für deine About-
Anwendung. Eventuell habe ich deine Frage
falsch interpretiert? Es gibt vielleicht
noch einfachere Lösungen für diese Aufgabe.
Übrigens dein """bla bla ...""" Text lässt
sich nicht zentrieren. Ich weiss nicht wieso?

Gruss wuf

Code: Alles auswählen

#! Python
# -*- coding: UTF-8 -*-

# Hauptscript

from Tkinter import *
from About   import *

def ende():
	fenster.destroy()

def info():
	About(content)

if __name__ == '__main__':
	fenster = Tk()

	ScreenWidth  = fenster.winfo_screenwidth()
	ScreenHeight = fenster.winfo_screenheight()

	xpos   = 0
	ypos   = 0
	width  = 300
	height = 100
	fenster.wm_geometry("%dx%d+%d+%d" % (width,height,xpos,ypos))

	fenster.title('Hauptfenster')

	content =  "bla\nbla\nbla\n...\n"
	content += "Here comes DER OLF\n"
	content += "the camel hunter!"

	cancel_button = Button(fenster, text = "Schliessen", command = ende)
	cancel_button["height"] = 1
	cancel_button["width"] = 12
	cancel_button["border"] = 3
	cancel_button.pack(side=BOTTOM)

	Info_button = Button(fenster, text = "About", command = info)
	Info_button["height"] = 1
	Info_button["width"] = 12
	Info_button["border"] = 3
	Info_button.pack(side=BOTTOM)

	fenster.mainloop()

from Tkinter import *
class About(Toplevel):
	def __init__(me,meldung='About'):

		#~~ Initialisierung eines Rahmenlosen Toplevelfenster
		Toplevel.__init__(me)
		# Erzeugt Rahmenloses Fenster
		me.overrideredirect(TRUE)
		# Sperrt Schaltflächen auf dem Hauptfenster
		me.grab_set()

		# Berechnung für ein Bildschirmzentriertes About-Fenster
		width        = 250
		height       = 150
		ScreenWidth  = me.winfo_screenwidth()
		ScreenHeight = me.winfo_screenheight()
		xpos         = (ScreenWidth-width)/2
		ypos         = (ScreenHeight-height)/2

		me.geometry("%dx%d+%d+%d" % (width,height,xpos,ypos))
		me.title ('About..')

		me['bg']     = 'steelblue'
		me['bd']     = 3
		me['relief'] = RAISED

		aboutlbl = Label(me,anchor="center", text= meldung,bg=me['bg'],fg="yellow")
		aboutlbl.pack(padx=5,pady=5)

		ok_button = Button(me, text = "OK",
						   highlightbackground = me['bg'],
						   command = me.destroy
						   )
		ok_button.pack(padx=5,pady=5)


Take it easy Mates!
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

Sonntag 18. Januar 2004, 00:02

jetzt öffnet sich beim starten das fenster.
dann schließ ichs und ich hab wieder das gleiche problem. :?

ich denke dass der ansatz von hans nicht ganz verkehrt war.
habt ihr eine lösung für die show / hide sache?
Benutzeravatar
wuf
User
Beiträge: 1492
Registriert: Sonntag 8. Juni 2003, 09:50

Sonntag 18. Januar 2004, 22:35

Hi DER OLF

Was ist dein Problem genau?

wuf
Take it easy Mates!
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Montag 19. Januar 2004, 01:46

Hi wuf,

du hättest die beiden scripte vielleicht besser trennen sollen.


Gruß

Dookie
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

Montag 19. Januar 2004, 12:40

hhmm...
ich komm da von allein nich drauf, und bei suchmaschinen hab ich die suche nach Tkinter auch aufgegeben... :?

habt ihr ne lösung im bezug auf show/hide?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Montag 19. Januar 2004, 13:32

Also nochmal,
show = deiconify
hide = withdraw


Gruß

Dookie
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

Montag 19. Januar 2004, 13:43

ja, aber die parameter :roll:
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Montag 19. Januar 2004, 16:45

welche Parameter?

Code: Alles auswählen

>>> from Tkinter import *
>>> fenster = TK()
>>> fenster.withdraw()
>>> fenster.deiconify()

Gruß

Dookie
DER Olf
User
Beiträge: 283
Registriert: Mittwoch 24. Dezember 2003, 19:32

Montag 19. Januar 2004, 17:09

AttributeError: Tk instance has no attribute 'widthdraw'

und das fenster öffnet sich auf gleich beim starten der haupt datei.
:? :? :?
Dookie
Python-Forum Veteran
Beiträge: 2010
Registriert: Freitag 11. Oktober 2002, 18:00
Wohnort: Salzburg
Kontaktdaten:

Montag 19. Januar 2004, 18:59

welche Version von TK und Python verwendest Du?
Antworten