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 :wink:

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 :wink:

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 :wink:

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 :D *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.