在 tkinter 中获取 Toplevel windows 的数量
Get the number of Toplevel windows in tkinter
有没有办法在 tkinter 中获取顶层 windows 的数量?
代码如下:
from tkinter import *
root = Tk()
root.geometry("500x500")
def get_number_of_toplevel_windows():
# Code to count the number of toplevel windows
pass
toplevel_1 = Toplevel(root)
toplevel_2 = Toplevel(root)
toplevel_3 = Toplevel(root)
get_button = Button(root , text = "Get number of toplevel windows" , command = get_number_of_toplevel_windows)
get_button.pack()
mainloop()
在这里,当我点击 get_button
时,我想打印顶层的数量 windows(在本例中为三个。)。
有什么方法可以在 tkinter 中实现吗?
如果有人能帮助我就太好了。
此解决方案仅适用于 Windows
平台(需要 pywinauto 库):
import tkinter as tk
from pywinauto import Desktop
NAME = 'Program name'
def get_number_of_toplevel_windows():
windows = Desktop(backend='uia').windows()
print(len([w.window_text() for w in windows if w.window_text() == NAME])-1)
root = tk.Tk()
root.title(NAME)
tk.Toplevel(root)
tk.Toplevel(root)
tk.Toplevel(root)
tk.Button(root, text='Get number of toplevel windows', command=get_number_of_toplevel_windows).pack()
tk.mainloop()
输出:
3
这对我有用
from tkinter import *
root = Tk()
root.geometry("500x500")
toplevel_1 = Toplevel(root)
count = 0 #Total count of Toplevels
def get_number_of_toplevel_windows(ventana):
global count
for a,b in ventana.children.items(): #Getting list of root window's children and using recursion
if isinstance(b, Toplevel):
count+=1 #If toplevel then count += 1
get_number_of_toplevel_windows(b)
def printresult():
print(count)
get_button = Button(root , text = "Get number of toplevel windows" , command = printresult)
get_button.pack()
get_number_of_toplevel_windows(root)
root.mainloop()
您可以只使用 winfo_children()
调出所有 children,然后检查其中的 'toplevel',例如:
def get_number_of_toplevel_windows():
tops = [] # Empty list for appending each toplevel
for widget in root.winfo_children(): # Looping through widgets in main window
if '!toplevel' in str(widget): # If toplevel exists in the item
tops.append(widget) # Append it to the list
print(len(tops)) # Get the number of items in the list, AKA total toplevels
这也不需要任何外部模块。
或者:
def get_number_of_toplevel_windows():
tops = []
for widget in root.winfo_children(): # Loop through each widget in main window
if isinstance(widget,Toplevel): # If widget is an instance of toplevel
tops.append(widget) # Append to a list
print(len(tops)) # Get the number of items in the list, AKA number of toplevels
后一种方法似乎更有效,因为它检查项目的实例并且不像第一种方法那样比较字符串。
有没有办法在 tkinter 中获取顶层 windows 的数量?
代码如下:
from tkinter import *
root = Tk()
root.geometry("500x500")
def get_number_of_toplevel_windows():
# Code to count the number of toplevel windows
pass
toplevel_1 = Toplevel(root)
toplevel_2 = Toplevel(root)
toplevel_3 = Toplevel(root)
get_button = Button(root , text = "Get number of toplevel windows" , command = get_number_of_toplevel_windows)
get_button.pack()
mainloop()
在这里,当我点击 get_button
时,我想打印顶层的数量 windows(在本例中为三个。)。
有什么方法可以在 tkinter 中实现吗?
如果有人能帮助我就太好了。
此解决方案仅适用于 Windows
平台(需要 pywinauto 库):
import tkinter as tk
from pywinauto import Desktop
NAME = 'Program name'
def get_number_of_toplevel_windows():
windows = Desktop(backend='uia').windows()
print(len([w.window_text() for w in windows if w.window_text() == NAME])-1)
root = tk.Tk()
root.title(NAME)
tk.Toplevel(root)
tk.Toplevel(root)
tk.Toplevel(root)
tk.Button(root, text='Get number of toplevel windows', command=get_number_of_toplevel_windows).pack()
tk.mainloop()
输出:
3
这对我有用
from tkinter import *
root = Tk()
root.geometry("500x500")
toplevel_1 = Toplevel(root)
count = 0 #Total count of Toplevels
def get_number_of_toplevel_windows(ventana):
global count
for a,b in ventana.children.items(): #Getting list of root window's children and using recursion
if isinstance(b, Toplevel):
count+=1 #If toplevel then count += 1
get_number_of_toplevel_windows(b)
def printresult():
print(count)
get_button = Button(root , text = "Get number of toplevel windows" , command = printresult)
get_button.pack()
get_number_of_toplevel_windows(root)
root.mainloop()
您可以只使用 winfo_children()
调出所有 children,然后检查其中的 'toplevel',例如:
def get_number_of_toplevel_windows():
tops = [] # Empty list for appending each toplevel
for widget in root.winfo_children(): # Looping through widgets in main window
if '!toplevel' in str(widget): # If toplevel exists in the item
tops.append(widget) # Append it to the list
print(len(tops)) # Get the number of items in the list, AKA total toplevels
这也不需要任何外部模块。
或者:
def get_number_of_toplevel_windows():
tops = []
for widget in root.winfo_children(): # Loop through each widget in main window
if isinstance(widget,Toplevel): # If widget is an instance of toplevel
tops.append(widget) # Append to a list
print(len(tops)) # Get the number of items in the list, AKA number of toplevels
后一种方法似乎更有效,因为它检查项目的实例并且不像第一种方法那样比较字符串。