How to make a window fullscreen in a secondary display with tkinter?

后端 未结 3 1325
無奈伤痛
無奈伤痛 2021-01-04 02:22

I know how to make a window fullscreen in the \"main\" display, but even when moving my app\'s window to a secondary display connected to my PC, when I call:



        
相关标签:
3条回答
  • 2021-01-04 03:16

    Try:

    from Tkinter import *
    
    rot = Tk()
    
    
    wth,hgh = rot.winfo_screenwidth(),rot.winfo_screenheight()
    #take desktop width and hight (pixel)
    _w,_h = 800,600 #root width and hight
    a,b = (wth-_w)/2,(hgh-_h)/2 #Put root to center of display(Margin_left,Margin_top)
    
    
    
    def spann():
        def _exit():
            da.destroy()
    
        da = Toplevel()
        da.geometry('%dx%d+%d+%d' % (wth, hgh,0, 0))
    
        Button(da,text="Exit",command=_exit).pack()
        da.overrideredirect(1)
        da.focus_set()#Restricted access main menu
    
    
    
    
    Button(rot,text="Exit",command=lambda rot=rot : rot.destroy()).pack()
    
    
    but = Button(rot,text="Show SUB",command=spann)
    but.pack()
    
    
    rot.geometry('%sx%s+%s+%s'%(_w,_h,a,b))
    rot.mainloop()
    """ Geometry pattern 'WxH+a+b'
            W = Width
            H = Height
            a = Margin_left+Margin_Top"""
    
    0 讨论(0)
  • 2021-01-04 03:17

    Windows, Python 3.8

    In this solution, pressing F11 will make the window fullscreen on the current screen.

    Note that self.root.state("zoomed") is Windows specific according to doc.

    self.root.overrideredirect(True) is weird in Windows and may have unwanted side effects. For instance I've had issues related to changing screen configuration with this option active.

    #!/usr/bin/env python3
    import tkinter as tk
    
    
    class Gui:
        fullScreen = False
    
        def __init__(self):
            self.root = tk.Tk()
            self.root.bind("<F11>", self.toggleFullScreen)
            self.root.bind("<Alt-Return>", self.toggleFullScreen)
            self.root.bind("<Control-w>", self.quit)
            self.root.mainloop()
    
        def toggleFullScreen(self, event):
            if self.fullScreen:
                self.deactivateFullscreen()
            else:
                self.activateFullscreen()
    
        def activateFullscreen(self):
            self.fullScreen = True
    
            # Store geometry for reset
            self.geometry = self.root.geometry()
    
            # Hides borders and make truly fullscreen
            self.root.overrideredirect(True)
    
            # Maximize window (Windows only). Optionally set screen geometry if you have it
            self.root.state("zoomed")
    
        def deactivateFullscreen(self):
            self.fullScreen = False
            self.root.state("normal")
            self.root.geometry(self.geometry)
            self.root.overrideredirect(False)
    
        def quit(self, event=None):
            print("quiting...", event)
            self.root.quit()
    
    
    if __name__ == '__main__':
        Gui()
    
    0 讨论(0)
  • 2021-01-04 03:21

    This works on Windows 7: If the second screen width and height are the same as the first one, you can use win1 or win2 geometry of the following code depending its relative position(leftof or rightof) to have a fullscreen in a secondary display:

    from Tkinter import *
    
    def create_win():
        def close(): win1.destroy();win2.destroy()
        win1 = Toplevel()
        win1.geometry('%dx%d%+d+%d'%(sw,sh,-sw,0))
        Button(win1,text="Exit1",command=close).pack()
        win2 = Toplevel()
        win2.geometry('%dx%d%+d+%d'%(sw,sh,sw,0))
        Button(win2,text="Exit2",command=close).pack()
    
    root=Tk()
    sw,sh = root.winfo_screenwidth(),root.winfo_screenheight()
    print "screen1:",sw,sh
    w,h = 800,600 
    a,b = (sw-w)/2,(sh-h)/2 
    
    Button(root,text="Exit",command=lambda r=root:r.destroy()).pack()
    Button(root,text="Create win2",command=create_win).pack()
    
    root.geometry('%sx%s+%s+%s'%(w,h,a,b))
    root.mainloop()
    
    0 讨论(0)
提交回复
热议问题