打开 Tkinter Window 使其位于开始菜单栏上
Open Tkinter Window so it sits on start menu bar
我想在屏幕右下角或开始栏所在的位置打开一个 Tkinter window。很像当您点击膝上型电脑上的电池图标并弹出该框时。我的代码目前将它隐藏在开始菜单栏后面。我基本上喜欢它在右下角,但坐在开始菜单栏的顶部。另外,如果开始菜单不在底部,我不确定如何解决问题。
我的代码:
from Tkinter import *
def bottom_right(w=300, h=200):
# get screen width and height
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
# calculate position x, y
x = (screen_width - w)
y = (screen_height-h)
root.geometry('%dx%d+%d+%d' % (w, h, x, y))
root = Tk()
bottom_right(500, 300)
root.mainloop()
您所说的 'start menu bar' 通常称为任务栏,至少在 Windows 上是这样。 root.iconify()
将根 window 最小化到任务栏,无论它在哪里,就像单击 window 右上角的 [_] 一样。单击图标 de_iconifies 它,就像任何其他应用程序一样。
root = tk.Tk()
root.iconify()
<build gui>
root.deiconify()
root.mainloop()
是经过优化的应用程序中的一种常见模式,当该部分花费的时间足够长以导致潜在的可见构造时 activity。我相信将 gui 放入框架中并在最后一步打包框架具有相同的效果(隐藏构造)。
可以用win32api
的.GetMonitorInfo()
找到显示器的'working area',也就是没有任务栏的显示器区域。然后,查看任务栏在哪里,您可以将 window 放在工作区的一角。看这个例子:
import win32api
import Tkinter as tk
for monitor in win32api.EnumDisplayMonitors():
monitor_info = win32api.GetMonitorInfo(monitor[0])
if monitor_info['Flags'] == 1:
break
work_area = monitor_info['Work']
total_area = monitor_info['Monitor']
width = 300
height = 200
side = [i for i in range(4) if work_area[i]!=total_area[i]]
# Left
if side ==[0]:
x = str(work_area[0])
y = str(work_area[3]-height)
# Top
elif side == [1]:
x = str(work_area[2]-width)
y = str(work_area[1])
# Right
elif side == [2]:
x = str(work_area[2]-width)
y = str(work_area[3]-height)
# Bottom
elif side == [3]:
x = str(work_area[2]-width)
y = str(work_area[3]-height)
else:
x = str(work_area[2]-width)
y = str(work_area[3]-height)
geom = '{}x{}+{}+{}'.format(width, height, x, y)
root = tk.Tk()
root.configure(background='red')
root.geometry(geom)
root.overrideredirect(True)
root.mainloop()
请注意,我已经使用 overrideredirect
去除了 window 的框架,因为这会稍微影响放置。
我想在屏幕右下角或开始栏所在的位置打开一个 Tkinter window。很像当您点击膝上型电脑上的电池图标并弹出该框时。我的代码目前将它隐藏在开始菜单栏后面。我基本上喜欢它在右下角,但坐在开始菜单栏的顶部。另外,如果开始菜单不在底部,我不确定如何解决问题。
我的代码:
from Tkinter import *
def bottom_right(w=300, h=200):
# get screen width and height
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
# calculate position x, y
x = (screen_width - w)
y = (screen_height-h)
root.geometry('%dx%d+%d+%d' % (w, h, x, y))
root = Tk()
bottom_right(500, 300)
root.mainloop()
您所说的 'start menu bar' 通常称为任务栏,至少在 Windows 上是这样。 root.iconify()
将根 window 最小化到任务栏,无论它在哪里,就像单击 window 右上角的 [_] 一样。单击图标 de_iconifies 它,就像任何其他应用程序一样。
root = tk.Tk()
root.iconify()
<build gui>
root.deiconify()
root.mainloop()
是经过优化的应用程序中的一种常见模式,当该部分花费的时间足够长以导致潜在的可见构造时 activity。我相信将 gui 放入框架中并在最后一步打包框架具有相同的效果(隐藏构造)。
可以用win32api
的.GetMonitorInfo()
找到显示器的'working area',也就是没有任务栏的显示器区域。然后,查看任务栏在哪里,您可以将 window 放在工作区的一角。看这个例子:
import win32api
import Tkinter as tk
for monitor in win32api.EnumDisplayMonitors():
monitor_info = win32api.GetMonitorInfo(monitor[0])
if monitor_info['Flags'] == 1:
break
work_area = monitor_info['Work']
total_area = monitor_info['Monitor']
width = 300
height = 200
side = [i for i in range(4) if work_area[i]!=total_area[i]]
# Left
if side ==[0]:
x = str(work_area[0])
y = str(work_area[3]-height)
# Top
elif side == [1]:
x = str(work_area[2]-width)
y = str(work_area[1])
# Right
elif side == [2]:
x = str(work_area[2]-width)
y = str(work_area[3]-height)
# Bottom
elif side == [3]:
x = str(work_area[2]-width)
y = str(work_area[3]-height)
else:
x = str(work_area[2]-width)
y = str(work_area[3]-height)
geom = '{}x{}+{}+{}'.format(width, height, x, y)
root = tk.Tk()
root.configure(background='red')
root.geometry(geom)
root.overrideredirect(True)
root.mainloop()
请注意,我已经使用 overrideredirect
去除了 window 的框架,因为这会稍微影响放置。