从另一个 class 访问特定的 ttk.Notebook 标签
Access specific ttk.Notebook tab from another class
我在一个文件中有两个 classes,一个用于主 gui,另一个用于小设置 gui。
from tkinter import *
import tkinter as tk
class Class1:
def __init__(self, mainwindow):
self.mainwindow = mainwindow
self.mainwindow.title("Assistant")
self.mainwindow.geometry("550x400")
# -- MenuBar --
MenuBar = Menu(self.mainwindow)
# FirstMenu
FirstMenu = Menu(MenuBar, tearoff=False)
FirstMenu.add_command(label="Settings", command=self.OpenInfo)
self.mainwindow.config(menu=MenuBar)
def OpenInfo(self):
self.OpenSettings = Toplevel(self.mainwindow)
self.app = SettingsGUI(self.OpenSettings)
# -- MISSING CODE HERE --
class SettingsGUI:
def __init__(self, settingswindow):
self.settingswindow = settingswindow
self.settingswindow.title("Settings")
self.settingswindow.geometry("300x250")
self.settingswindow.grab_set()
def close_windows(self):
self.settingswindow.release_set()
self.settingswindow.destroy()
SettingsFrame = Frame(self.settingswindow, bg="yellow")
SettingsFrame.pack(fill=tk.BOTH, side=TOP, expand=True)
SettingsTab = ttk.Notebook(SettingsTabFrame)
PreferencesTab = ttk.Frame(SettingsTab)
SettingsTab.add(PreferencesTab, text='Preferences')
AppearanceTab = ttk.Frame(SettingsTab)
SettingsTab.add(AppearanceTab, text='Appearance')
InfoTab = ttk.Frame(SettingsTab)
SettingsTab.add(InfoTab, text='Info')
def main():
mainwindow = tk.Tk()
app = Class1(mainwindow)
mainwindow.mainloop()
if __name__ == '__main__':
main()
我不知道要在 OpenInfo
命令中添加什么,不仅可以打开 SettingsGUI
,还可以打开 特定的选项卡 (第三个, InfoTab
) 的 SettingsGUI
.
我知道 ttk Notebook 中的 select 函数,但我真的不知道如何使用它从 class 到另一个
------------------------ 编辑:------------ --------------
我在一个文件中有两个 classes,一个用于主 gui,另一个用于小设置 gui。
import tkinter as tk
from tkinter import ttk
class AssistantGUI:
def __init__(self, mainwindow):
self.mainwindow = mainwindow
self.mainwindow.title("Assistant")
self.mainwindow.geometry("550x400")
# -- MenuBar --
MenuBar = tk.Menu(self.mainwindow)
# FirstMenu
FirstMenu = tk.Menu(MenuBar, tearoff = False)
# added this
MenuBar.add_cascade(label = "Open", menu = FirstMenu)
FirstMenu.add_command(label = "Settings", command = self.OpenSettings)
FirstMenu.add_command(label = "Info", command = self.OpenInfo)
self.mainwindow.config(menu=MenuBar)
def OpenSettings(self):
self.OpenSettings = tk.Toplevel(self.mainwindow)
self.app = SettingsGUI(self.OpenSettings)
def OpenInfo(self):
self.OpenSettings = tk.Toplevel(self.mainwindow)
self.app = SettingsGUI(self.OpenSettings)
# -- MISSING CODE HERE TO SELECT INFOTAB --
class SettingsGUI:
def __init__(self, settingswindow):
self.settingswindow = settingswindow
self.settingswindow.title("Settings")
self.settingswindow.geometry("300x250")
self.settingswindow.grab_set()
def close_windows(self):
self.settingswindow.destroy()
SettingsFrame = tk.Frame(self.settingswindow, bg = "yellow")
SettingsFrame.pack(fill = tk.BOTH, side = tk.TOP, expand = True)
# changed this from SettingsTabFrame
SettingsTab = ttk.Notebook(SettingsFrame)
PreferencesTab = ttk.Frame(SettingsTab)
SettingsTab.add(PreferencesTab, text = 'Preferences')
AppearanceTab = ttk.Frame(SettingsTab)
SettingsTab.add(AppearanceTab, text = 'Appearance')
InfoTab = ttk.Frame(SettingsTab)
SettingsTab.add(InfoTab, text = 'Info')
# added these
SettingsTab.pack(fill = tk.BOTH, side = tk.TOP, expand = True)
# Force focus on settingswindow
SettingsTab.focus_force()
def main():
mainwindow = tk.Tk()
app = AssistantGUI(mainwindow)
mainwindow.mainloop()
if __name__ == '__main__':
main()
我不知道要在 OpenInfo
命令中添加什么,不仅可以打开 SettingsGUI
,还可以打开 特定的选项卡 (第三个, InfoTab
) 的 SettingsGUI
.
我知道 ttk Notebook 中的 select 函数,但我真的不知道如何使用它从 class 到另一个
我对你的代码做了一些修改。
代码在相关位置插入了注释,详细说明了所有更改。
主要的是 SettingsTab.select(InfoTab)
和 'SettingsTab.pack(...`
您的菜单也需要调整 add_cascade
。
import tkinter as tk
from tkinter import ttk
# changed this from Class1
class AssistantGUI:
def __init__(self, mainwindow):
self.mainwindow = mainwindow
self.mainwindow.title("Assistant")
self.mainwindow.geometry("550x400")
# -- MenuBar --
MenuBar = tk.Menu(self.mainwindow)
# FirstMenu
FirstMenu = tk.Menu(MenuBar, tearoff = False)
# added this
MenuBar.add_cascade(label = "Open", menu = FirstMenu)
FirstMenu.add_command(label = "Settings", command = self.OpenInfo)
self.mainwindow.config(menu=MenuBar)
def OpenInfo(self):
self.OpenSettings = tk.Toplevel(self.mainwindow)
self.app = SettingsGUI(self.OpenSettings)
# -- MISSING CODE HERE --
class SettingsGUI:
def __init__(self, settingswindow):
self.settingswindow = settingswindow
self.settingswindow.title("Settings")
self.settingswindow.geometry("300x250")
self.settingswindow.grab_set()
def close_windows(self):
# removed grab_release
self.settingswindow.destroy()
SettingsFrame = tk.Frame(self.settingswindow, bg = "yellow")
SettingsFrame.pack(fill = tk.BOTH, side = tk.TOP, expand = True)
# changed this from SettingsTabFrame
SettingsTab = ttk.Notebook(SettingsFrame)
PreferencesTab = ttk.Frame(SettingsTab)
SettingsTab.add(PreferencesTab, text = 'Preferences')
AppearanceTab = ttk.Frame(SettingsTab)
SettingsTab.add(AppearanceTab, text = 'Appearance')
InfoTab = ttk.Frame(SettingsTab)
SettingsTab.add(InfoTab, text = 'Info')
# added these
SettingsTab.pack(fill = tk.BOTH, side = tk.TOP, expand = True)
# focus on InfoTab
SettingsTab.select(InfoTab)
# Force focus on settingswindow
SettingsTab.focus_force()
def main():
mainwindow = tk.Tk()
app = AssistantGUI(mainwindow)
mainwindow.mainloop()
if __name__ == '__main__':
main()
如果您想在 OpenInfo 中保持控制权,请像这样更改它。
def OpenInfo(self):
self.OpenSettings = tk.Toplevel(self.mainwindow)
self.app = SettingsGUI(self.OpenSettings)
# focus on InfoTab
self.app.SettingsTab.select(self.app.InfoTab)
# Force focus on settingswindow
self.app.SettingsTab.focus_force()
您必须更改 SettingsTab
和 InfoTab
,在每个前面加上 'self.'
我在一个文件中有两个 classes,一个用于主 gui,另一个用于小设置 gui。
from tkinter import *
import tkinter as tk
class Class1:
def __init__(self, mainwindow):
self.mainwindow = mainwindow
self.mainwindow.title("Assistant")
self.mainwindow.geometry("550x400")
# -- MenuBar --
MenuBar = Menu(self.mainwindow)
# FirstMenu
FirstMenu = Menu(MenuBar, tearoff=False)
FirstMenu.add_command(label="Settings", command=self.OpenInfo)
self.mainwindow.config(menu=MenuBar)
def OpenInfo(self):
self.OpenSettings = Toplevel(self.mainwindow)
self.app = SettingsGUI(self.OpenSettings)
# -- MISSING CODE HERE --
class SettingsGUI:
def __init__(self, settingswindow):
self.settingswindow = settingswindow
self.settingswindow.title("Settings")
self.settingswindow.geometry("300x250")
self.settingswindow.grab_set()
def close_windows(self):
self.settingswindow.release_set()
self.settingswindow.destroy()
SettingsFrame = Frame(self.settingswindow, bg="yellow")
SettingsFrame.pack(fill=tk.BOTH, side=TOP, expand=True)
SettingsTab = ttk.Notebook(SettingsTabFrame)
PreferencesTab = ttk.Frame(SettingsTab)
SettingsTab.add(PreferencesTab, text='Preferences')
AppearanceTab = ttk.Frame(SettingsTab)
SettingsTab.add(AppearanceTab, text='Appearance')
InfoTab = ttk.Frame(SettingsTab)
SettingsTab.add(InfoTab, text='Info')
def main():
mainwindow = tk.Tk()
app = Class1(mainwindow)
mainwindow.mainloop()
if __name__ == '__main__':
main()
我不知道要在 OpenInfo
命令中添加什么,不仅可以打开 SettingsGUI
,还可以打开 特定的选项卡 (第三个, InfoTab
) 的 SettingsGUI
.
我知道 ttk Notebook 中的 select 函数,但我真的不知道如何使用它从 class 到另一个
------------------------ 编辑:------------ --------------
我在一个文件中有两个 classes,一个用于主 gui,另一个用于小设置 gui。
import tkinter as tk
from tkinter import ttk
class AssistantGUI:
def __init__(self, mainwindow):
self.mainwindow = mainwindow
self.mainwindow.title("Assistant")
self.mainwindow.geometry("550x400")
# -- MenuBar --
MenuBar = tk.Menu(self.mainwindow)
# FirstMenu
FirstMenu = tk.Menu(MenuBar, tearoff = False)
# added this
MenuBar.add_cascade(label = "Open", menu = FirstMenu)
FirstMenu.add_command(label = "Settings", command = self.OpenSettings)
FirstMenu.add_command(label = "Info", command = self.OpenInfo)
self.mainwindow.config(menu=MenuBar)
def OpenSettings(self):
self.OpenSettings = tk.Toplevel(self.mainwindow)
self.app = SettingsGUI(self.OpenSettings)
def OpenInfo(self):
self.OpenSettings = tk.Toplevel(self.mainwindow)
self.app = SettingsGUI(self.OpenSettings)
# -- MISSING CODE HERE TO SELECT INFOTAB --
class SettingsGUI:
def __init__(self, settingswindow):
self.settingswindow = settingswindow
self.settingswindow.title("Settings")
self.settingswindow.geometry("300x250")
self.settingswindow.grab_set()
def close_windows(self):
self.settingswindow.destroy()
SettingsFrame = tk.Frame(self.settingswindow, bg = "yellow")
SettingsFrame.pack(fill = tk.BOTH, side = tk.TOP, expand = True)
# changed this from SettingsTabFrame
SettingsTab = ttk.Notebook(SettingsFrame)
PreferencesTab = ttk.Frame(SettingsTab)
SettingsTab.add(PreferencesTab, text = 'Preferences')
AppearanceTab = ttk.Frame(SettingsTab)
SettingsTab.add(AppearanceTab, text = 'Appearance')
InfoTab = ttk.Frame(SettingsTab)
SettingsTab.add(InfoTab, text = 'Info')
# added these
SettingsTab.pack(fill = tk.BOTH, side = tk.TOP, expand = True)
# Force focus on settingswindow
SettingsTab.focus_force()
def main():
mainwindow = tk.Tk()
app = AssistantGUI(mainwindow)
mainwindow.mainloop()
if __name__ == '__main__':
main()
我不知道要在 OpenInfo
命令中添加什么,不仅可以打开 SettingsGUI
,还可以打开 特定的选项卡 (第三个, InfoTab
) 的 SettingsGUI
.
我知道 ttk Notebook 中的 select 函数,但我真的不知道如何使用它从 class 到另一个
我对你的代码做了一些修改。
代码在相关位置插入了注释,详细说明了所有更改。
主要的是 SettingsTab.select(InfoTab)
和 'SettingsTab.pack(...`
您的菜单也需要调整 add_cascade
。
import tkinter as tk
from tkinter import ttk
# changed this from Class1
class AssistantGUI:
def __init__(self, mainwindow):
self.mainwindow = mainwindow
self.mainwindow.title("Assistant")
self.mainwindow.geometry("550x400")
# -- MenuBar --
MenuBar = tk.Menu(self.mainwindow)
# FirstMenu
FirstMenu = tk.Menu(MenuBar, tearoff = False)
# added this
MenuBar.add_cascade(label = "Open", menu = FirstMenu)
FirstMenu.add_command(label = "Settings", command = self.OpenInfo)
self.mainwindow.config(menu=MenuBar)
def OpenInfo(self):
self.OpenSettings = tk.Toplevel(self.mainwindow)
self.app = SettingsGUI(self.OpenSettings)
# -- MISSING CODE HERE --
class SettingsGUI:
def __init__(self, settingswindow):
self.settingswindow = settingswindow
self.settingswindow.title("Settings")
self.settingswindow.geometry("300x250")
self.settingswindow.grab_set()
def close_windows(self):
# removed grab_release
self.settingswindow.destroy()
SettingsFrame = tk.Frame(self.settingswindow, bg = "yellow")
SettingsFrame.pack(fill = tk.BOTH, side = tk.TOP, expand = True)
# changed this from SettingsTabFrame
SettingsTab = ttk.Notebook(SettingsFrame)
PreferencesTab = ttk.Frame(SettingsTab)
SettingsTab.add(PreferencesTab, text = 'Preferences')
AppearanceTab = ttk.Frame(SettingsTab)
SettingsTab.add(AppearanceTab, text = 'Appearance')
InfoTab = ttk.Frame(SettingsTab)
SettingsTab.add(InfoTab, text = 'Info')
# added these
SettingsTab.pack(fill = tk.BOTH, side = tk.TOP, expand = True)
# focus on InfoTab
SettingsTab.select(InfoTab)
# Force focus on settingswindow
SettingsTab.focus_force()
def main():
mainwindow = tk.Tk()
app = AssistantGUI(mainwindow)
mainwindow.mainloop()
if __name__ == '__main__':
main()
如果您想在 OpenInfo 中保持控制权,请像这样更改它。
def OpenInfo(self):
self.OpenSettings = tk.Toplevel(self.mainwindow)
self.app = SettingsGUI(self.OpenSettings)
# focus on InfoTab
self.app.SettingsTab.select(self.app.InfoTab)
# Force focus on settingswindow
self.app.SettingsTab.focus_force()
您必须更改 SettingsTab
和 InfoTab
,在每个前面加上 'self.'