如何使用tkinter在辅助显示器中创建一个全屏窗口?

时间:2014-10-09 19:40:15

标签: python tkinter screen fullscreen

我知道如何在" main"中创建一个全屏窗口。显示,但即​​使将我的应用程序的窗口移动到连接到我的电脑的辅助显示器,当我打电话时:

self.master.attributes('-fullscreen', True)

全屏显示该窗口,它在" main"显示而非次要显示(应用程序的窗口从辅助显示屏上消失,并立即显示在"主要"一个,全屏显示)。

如何在辅助显示屏中全屏显示?

3 个答案:

答案 0 :(得分:2)

尝试:

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"""

答案 1 :(得分:1)

Windows,Python 3.8

在此解决方案中,按F11将使窗口全屏显示在当前屏幕上。

请注意,根据文档,self.root.state("zoomed")是特定于Windows的。

self.root.overrideredirect(True)在Windows中很奇怪,并且可能会有不良的副作用。例如,在启用此选项的情况下,我遇到了与更改屏幕配置有关的问题。

#!/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()

答案 2 :(得分:0)

2021 年超简单的方法

即使两个显示器的分辨率不同,这也能正常工作。使用 geometry 将第二个显示偏移第一个显示的宽度。 geometry 字符串的格式为 <width>x<height>+xoffset+yoffset:

root = tkinter.Tk()

# specify resolutions of both windows
w0, h0 = 3840, 2160
w1, h1 = 1920, 1080

# set up a window for first display, if wanted  
win0 = tkinter.Toplevel()
win0.geometry(f"{w0}x{h0}+0+0")

# set up window for second display with fullscreen 
win1 = tkinter.Toplevel()
win1.geometry(f"{w1}x{h1}+{w0}+0") # <- this is the key, offset to the right by w0
win1.attributes("-fullscreen", True)

只要您知道第一个显示器的宽度,就可以正常工作。运行的 X 系统 TK 默认将第二个显示器放在第一个显示器的右侧。