Seite 1 von 1
Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Montag 13. Mai 2013, 18:16
von koenigssphinx
Hallo,
als ich neulich an einem Programm gearbeitet habe, stellte sich mir die Frage, wie ich den Wechsel in den Vollbildmodus vollziehe.
Der Code in
__init__():
Code: Alles auswählen
self.fullscreen = False
self.main.bind("<KeyPress-F11>", self.chf)
Der Code in
chf():
Code: Alles auswählen
self.fullscreen = not self.fullscreen
self.main.wm_attributes("-fullscreen", self.fullscreen)
Könnt ihr mir sagen, was für einen Fehler ich gemacht habe? :K
Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Dienstag 14. Mai 2013, 10:32
von wuf
Hi koenigssphinx
Kannst du das folgende Skript einmal ausprobieren?:
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
try:
#~~ For Python 2.x
import Tkinter as tk
except ImportError:
#~~ For Python 3.x
import tkinter as tk
APP_WIN_XPOS = 50
APP_WIN_YPOS = 300
APP_WIN_WIDTH = 400
APP_WIN_HEIGHT = 400
class App(object):
def __init__(self):
self.win = tk.Tk()
self.win.protocol("WM_DELETE_WINDOW", self.close)
self.win.title("Application size")
self.win.geometry('{0}x{1}+{2}+{3}'.format(
APP_WIN_WIDTH, APP_WIN_HEIGHT, APP_WIN_XPOS, APP_WIN_YPOS))
self.win.bind('<F11>', self.fullscreen)
self.win.bind('<KeyPress-Escape>', self.app_size)
self.label_text = tk.StringVar()
self.label = tk.Label(self.win, textvariable=self.label_text)
self.label.pack(expand=True)
self.label_text.set("Press key F11 for fullscreen")
self.win.focus_set()
def fullscreen(self, event):
self.win.title("Fullscreen")
self.label_text.set("Press key Esc for application screensize")
self.win.wm_attributes("-fullscreen", True)
def app_size(self, event):
self.win.title("Application size")
self.label_text.set("Press key F11 for fullscreen")
self.win.wm_attributes("-fullscreen", False)
def run(self):
self.win.mainloop()
def close(self):
# Do things before closing application
self.win.destroy()
app = App().run()
Gruss wuf

Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Dienstag 14. Mai 2013, 11:33
von koenigssphinx
Danke!
Das Skript funktioniert, aber ich brauche es eigentlich so, dass <F11> beides übernimmt.
Ich versuche es erstmal mit diesem Ansatz.
Danke
Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Dienstag 14. Mai 2013, 11:39
von koenigssphinx
Dankeschön!! Ich habe das Problem gelöst!
Der Code:
Code: Alles auswählen
try:
#~~ For Python 2.x
import Tkinter as tk
except ImportError:
#~~ For Python 3.x
import tkinter as tk
APP_WIN_XPOS = 50
APP_WIN_YPOS = 300
APP_WIN_WIDTH = 400
APP_WIN_HEIGHT = 400
class App(object):
def __init__(self):
self.fullscreen = False
self.win = tk.Tk()
self.win.protocol("WM_DELETE_WINDOW", self.close)
self.win.title("Application size")
self.win.geometry('{0}x{1}+{2}+{3}'.format(
APP_WIN_WIDTH, APP_WIN_HEIGHT, APP_WIN_XPOS, APP_WIN_YPOS))
self.win.bind('<F11>', self.cf)
self.label_text = tk.StringVar()
self.label = tk.Label(self.win, textvariable=self.label_text)
self.label.pack(expand=True)
self.label_text.set("Press key F11 for fullscreen")
self.win.focus_set()
def cf(self, event):
self.fullscreen = not self.fullscreen
if self.fullscreen:
self.app_size()
else:
self.cfullscreen()
def cfullscreen(self):
self.win.title("Fullscreen")
self.label_text.set("Press key Esc for application screensize")
self.win.wm_attributes("-fullscreen", True)
def app_size(self):
self.win.title("Application size")
self.label_text.set("Press key F11 for fullscreen")
self.win.wm_attributes("-fullscreen", False)
def run(self):
self.win.mainloop()
def close(self):
# Do things before closing application
self.win.destroy()
app = App()
app.run()
Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Dienstag 14. Mai 2013, 12:29
von EyDu
cfullscreen und app_size sind im Prinzip identisch, das solltest du noch zu einer Methode zusammenfassen.
Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Dienstag 14. Mai 2013, 12:34
von koenigssphinx
Nein kann ich nicht, weil ich es früher ja so gemacht habe, aber das hat auch nicht funktioniert.
Schade,
in deinem Skript funktioniert es zwar, aber im Programm nicht.
Könnte mir vielleicht doch noch jemand helfen?
Grüße Königsphinx
Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Dienstag 14. Mai 2013, 12:46
von BlackJack
@koenigssphinx: Doch die kannst Du zusammenfassen. Warum sollte das nicht funktionieren? Und wenn das in Deinem Programm nicht funktioniert, dann musst Du *dort* irgend etwas anders machen als in dem Beispielprogramm.
Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Dienstag 14. Mai 2013, 13:50
von Dami123
Mit ner "if"-Schleife kannst du es zusammenfassen.
Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Dienstag 14. Mai 2013, 14:07
von BlackJack
@Dami123:
http://if-schleife.de/
Und da braucht man kein ``if`` das geht einfacher mit dem ``not`` wie koenigssphinx das ja auch schon selbst gezeigt hat.
Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Dienstag 14. Mai 2013, 16:17
von wuf
Hi koenigssphinx
Hier eine mögliche Lösung:
Code: Alles auswählen
try:
#~~ For Python 2.x
import Tkinter as tk
except ImportError:
#~~ For Python 3.x
import tkinter as tk
APP_WIN_XPOS = 50
APP_WIN_YPOS = 300
APP_WIN_WIDTH = 400
APP_WIN_HEIGHT = 400
class App(object):
def __init__(self):
self.fullscreen = False
self.win = tk.Tk()
self.win.protocol("WM_DELETE_WINDOW", self.close)
self.win.title("Application size")
self.win.geometry('{0}x{1}+{2}+{3}'.format(
APP_WIN_WIDTH, APP_WIN_HEIGHT, APP_WIN_XPOS, APP_WIN_YPOS))
self.win.bind('<F11>', self.toggle_screen_size)
self.label_text = tk.StringVar()
self.label = tk.Label(self.win, textvariable=self.label_text)
self.label.pack(expand=True)
self.label_text.set("Press key F11 for fullscreen")
self.fullscreen = False
self.win.focus_set()
def toggle_screen_size(self, event):
if self.fullscreen:
self.win.title("Application size")
self.label_text.set("Press key F11 for fullscreen")
self.win.wm_attributes("-fullscreen", False)
else:
self.win.title("Fullscreen")
self.label_text.set("Press key F11 for application screensize")
self.win.wm_attributes("-fullscreen", True)
self.fullscreen = not self.fullscreen
def run(self):
self.win.mainloop()
def close(self):
# Do things before closing application
self.win.destroy()
app = App()
app.run()
Gruß wuf

Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Dienstag 14. Mai 2013, 16:29
von EyDu
Code: Alles auswählen
def toggle_screen_size(self, event):
if self.fullscreen:
title, text = "Application size", "Press key F11 for fullscreen"
else:
title, text = "Fullscreen", "Press key F11 for application screensize"
self.win.title(title)
self.label_text.set(text)
self.win.wm_attributes("-fullscreen", not self.fullscreen)
self.fullscreen = not self.fullscreen
oder
Code: Alles auswählen
title, text = (
("Fullscreen", "Press key F11 for application screensize"),
("Application size", "Press key F11 for fullscreen"))[self.fullscreen]
Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Dienstag 14. Mai 2013, 17:01
von wuf
oder:
Code: Alles auswählen
def toggle_screen_size(self, event):
self.fullscreen = not self.fullscreen
title, text = (
("Application size", "Press key F11 for fullscreen"),
("Fullscreen", "Press key F11 for application screensize")
)[self.fullscreen]
self.win.title(title)
self.label_text.set(text)
self.win.wm_attributes("-fullscreen", self.fullscreen)
Gruß wuf

Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Dienstag 14. Mai 2013, 20:17
von Sirius3
oder:
Code: Alles auswählen
def toggle_screen_size(self, event):
TITLES = ("Application size", "Fullscreen")
self.fullscreen = not self.fullscreen
self.win.title(TITLES[self.fullscreen])
self.label_text.set("Press key F11 for %s"%TITLES[not self.fullscreen].lower())
self.win.wm_attributes("-fullscreen", self.fullscreen)
Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Dienstag 14. Mai 2013, 20:31
von Dami123
BlackJack hat geschrieben:@Dami123:
http://if-schleife.de/
Und da braucht man kein ``if`` das geht einfacher mit dem ``not`` wie koenigssphinx das ja auch schon selbst gezeigt hat.
Stimmt, "not" ist da die bessere Wahl!
Wird mir wohl nie wieder vorkommen, dass ich eine "if"-Abfrage als Schleife bezeichne

*add site to bookmarks*
Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Mittwoch 15. Mai 2013, 18:52
von koenigssphinx
Zwei Sachen:
1. Ich benutze Python 2.7(ja es gibt schon 3.3 ich weiß)
2. Tut mir leid, aber dies Hilft auch nicht weiter.
Schade, aber ich hoffe auf weiter Vorschläge, und probiere weiter aus
Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Mittwoch 15. Mai 2013, 19:31
von BlackJack
@koenigssphinx: Da kannst Du wahrscheinlich lange warten, denn die Lösung(en) stehen hier ja. Warum das bei *Dir* nicht funktioniert, kann man nicht sagen solange Du nicht verrätst was Du denn jetzt konkret anders machst als die Beispielprogramme.
Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Donnerstag 16. Mai 2013, 16:18
von koenigssphinx
Na Schön. Eigentlich sollte der Code ja bis zum Ende mein Geheimnis bleiben, aber jetzt bleibt mir wohl nicht mehr viel übrig.
Code: Alles auswählen
class Editor:
def __init__(self):
self.fs = False
self.fil = "Untitled Document"
self.save = True
self.main = Tk(className="")
self.main.title("pyIDE [Untitled Document] 1.0")
scroll = Scrollbar(self.main)
scroll.pack(side=RIGHT, fill=Y)
self.content = Text(self.main, yscrollcommand=scroll.set, wrap=WORD, tabs=("1c"))
scroll.config(command=self.content.yview)
self.content.bind("<Any-KeyPress>", self.unsave)
self.main.bind_all("<Control-KeyPress-s>", self.sfe)
self.main.bind("<Configure>", self.expand)
self.main.bind_all('<F11>', self.cf)
self.content.pack()
self.main.geometry("700x500")
self.menu = Menu(self.main)
self.main.config(menu=self.menu)
filemenu = Menu(self.menu, tearoff=0)
self.menu.add_cascade(label="File", menu=filemenu)
nfm = Menu(self.menu, tearoff=0)
filemenu.add_cascade(label="New", menu=nfm)
nfm.add_command(label="Empty Project", command=self.nf)
nfm.add_command(label="OOP Project", command=self.nfo)
nfm.add_command(label="Form Project", command=self.nff)
filemenu.add_command(label="Open", command=self.of)
filemenu.add_command(label="Save", command=self.sf)
filemenu.add_command(label="Save As", command=self.sfa)
filemenu.add_separator()
self.main.after(100, self.iniform)
self.main.after(0, self.register)
filemenu.add_command(label="Exit", command=self.main.destroy)
exemenu = Menu(self.menu, tearoff=0)
self.menu.add_cascade(label="Execute", menu=exemenu)
exemenu.add_command(label="Run", command=self.run)
exemenu.add_command(label="Run Line for Line(Debug)", command=self.runlfl)
helpmenu = Menu(self.menu, tearoff=0)
self.menu.add_cascade(label="?", menu=helpmenu)
helpmenu.add_command(label="Register", command=self.reg)
self.main.protocol("WM_DELETE_WINDOW", self.close)
def cf(self, event):
self.main.wm_attributes("-fullscreen", not self.fs)
self.fs= not self.fs
def reg(self):
s = registerDialog()
def runlfl(self):
try:
self.content.tag_configure("err", background="white")
except:
pass
x = self.content.get('1.0', END)
y = 0
x = x.split("#:breakpoint")
for i in x:
try:
y += 1
exec(i)
if i != len(x)-1:
showwarning("SystemBreak", "Die weitere Ausführung des Programmes wurde durch einen Breakpoint verhindert!")
except:
showerror("Fehler!", "Die Ausführung des Programmes wurde unterbrochen in Zeile " + str(y) + "!!!")
self.content.tag_add("err", str(y) + ".0", str(y) + ".end")
self.content.tag_configure("err", background="red")
break
def run(self):
try:
self.content.tag_configure("err", background="white")
except:
pass
try:
exec(self.content.get('1.0',END))
except TypeError:
print e.TYPEError(1, "<pyIDE>", "<content>")
return
except ImportError:
print e.IMPORTError(1, "<pyIDE>", "<content>")
return
except NameError:
print e.NAMEError(1, "<pyIDE>", "<content>")
return
except OSError:
print e.osError(1, "<pyIDE>", "<content>")
return
except SystemExit:
print e.EXITError(1, "<pyIDE>", "<content>")
return
except SyntaxError:
print e.SYNTAXError(1, "<pyIDE>", "<content>")
return
except EOFError:
print e.eofError(1, "<pyIDE>", "<content>")
return
except KeyboardInterrupt:
print e.KEYError(1, "<pyIDE>", "<content>")
return
except MemoryError:
print e.MEMError(1, "<pyIDE>", "<content>")
return
except AssertionError:
print e.ASSERTONError(1, "<pyIDE>", "<content>")
return
except:
print e.Error(1, "<pyIDE>", "<content>")
return
def register(self):
c = registerCheck()
if not c:
s = registerDialog()
def iniform(self):
self.form = Form()
def expand(self, event):
self.content.config(width=event.width)
self.content.config(height=event.height)
def sfe(self, event):
self.sf()
def unsave(self, event):
if self.save:
letter = "abcdefghijklmnopqrstuvwxyz1234567890äÄöÖüÜABCDEFGHIJKLMNOBQRSTUVWXYZ!\"\\<>|-:,^°'#*+§$%&/()= "
if event.keysym in letter:
self.save = False
self.main.title("pyIDE [" + self.fil + "]* 1.0")
def sf(self):
if self.fil != "Untitled Document":
try:
fli = open(self.fil, "w")
self.main.title("pyIDE [" + self.fil + "] 1.0")
fli.write(self.content.get('1.0',END))
fli.close()
except:
showerror("Fehler!", "Das Speichern hat nicht geklappt!")
else:
self.sfa()
def sfa(self):
try:
fil = asksaveasfilename(filetypes=(("Python Files", "*.py"), ("Python File(no console)","*.pyw"), ("All Files", "*.*")), defaultextension="*.py")
if fil != '':
self.fil = fil
fli = open(self.fil, "w")
fli.write(self.content.get('1.0',END))
fli.close()
self.save = True
self.main.title("pyIDE [" + self.fil + "] 1.0")
else:
showwarning("Info!", "Eine Datei muss ausgewählt werden!\nWurde nicht gespeichert!")
except:
showerror("Fehler!", "Das Speichern hat nicht geklappt!")
def of(self):
fil = askopenfilename(filetypes=(("Python Files", "*.py"), ("Python File(no console)","*.pyw"), ("All Files", "*.*")), defaultextension="*.py")
if fil != '':
try:
xname = open(fil, "r")
con = xname.readlines()
xname.close()
self.nf()
self.fil = fil
self.main.title("pyIDE [" + self.fil + "] 1.0")
for i in con:
self.content.insert(END, i)
except:
showerror("Fehler!", "Die Datei konnte nicht geöffnet werden!")
else:
showwarning("Info!", "Eine Datei muss ausgewählt werden\nWurde nicht geöffnet!")
def nf(self):
self.fil = "Untitled Document"
if not self.save:
if askyesno("ACHTUNG!", "Soll der Text gespeichert werden?"):
self.sf()
self.main.title("pyIDE [Untitled Document] 1.0")
self.content.delete('1.0', END)
def nfo(self):
self.nf()
oopc = """class Main:
def __init__(self, base):
self.base=base
pass
app=Main()
"""
self.content.insert('1.0', oopc)
def nff(self):
self.nf()
oopc = """from **formfile** import Form
class Main(Form):
def __init__(self):
Form.__init__(self)
app=Main()
app.MainLoop()
"""
self.content.insert('1.0', oopc)
def initialize(self):
self.main.mainloop()
def close(self):
# Do things before closing application
self.main.destroy()
Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Donnerstag 16. Mai 2013, 16:39
von BlackJack
@koenigssphinx: Und jetzt könntest Du daraus ein minimales, aber lauffähiges Beispiel basteln, welches das Problem zeigt. Also alles rauswerfen was nicht zum Problem gehört. Dabei wirst Du vielleicht selber schon feststellen wo das Problem liegt.
Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Montag 20. Mai 2013, 07:26
von koenigssphinx
Ok! Getan, jetzt funktioniert alles, aber nur im MiniCode.
Der Code:
Code: Alles auswählen
# -*- coding: cp1252 -*-
from Tkinter import *
class Editor:
def __init__(self):
self.fs = False
self.fil = "Untitled Document"
self.main = Tk(className="")
self.main.title("pyIDE [Untitled Document] 1.0")
scroll = Scrollbar(self.main)
scroll.pack(side=RIGHT, fill=Y)
self.content = Text(self.main, yscrollcommand=scroll.set, wrap=WORD, tabs=("1c"))
scroll.config(command=self.content.yview)
self.main.bind("<Configure>", self.expand)
self.main.bind_all('<F11>', self.cf)
self.content.pack()
self.main.geometry("700x500")
self.main.protocol("WM_DELETE_WINDOW", self.close)
def cf(self, event):
self.main.wm_attributes("-fullscreen", not self.fs)
self.fs= not self.fs
def expand(self, event):
self.content.config(width=event.width)
self.content.config(height=event.height)
def initialize(self):
self.main.mainloop()
def close(self):
# Do things before closing application
self.main.destroy()
m = Editor()
m.initialize()
Re: Ich brauche Hilfe, beim Tkinter Vollbilmodus!!!
Verfasst: Montag 20. Mai 2013, 09:55
von BlackJack
@koenigssphinx: Das nützt ja nichts, wir brauchen ein Codebeispiel welches *nicht* funktioniert, aber nicht den ganzen Kram enthält an dem es *nicht* liegt das es nicht funktioniert. Irgendetwas von dem was Du jetzt weg gelassen hast, ist der Grund warum es in Deinem vollständigen Programm nicht funktioniert. Dem kommt man auf die Spur in dem man Stück für Stück entfernt, solange bis das Problem nicht mehr auftritt. Irgend wann kommt man dann zu einem Punkt da funktioniert es und vor dem entfernen eines Codestücks funktionierte es nicht. Dann weiss man an welchem Code es liegt.