我在一個檔案中有兩個類,一個用于主 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 函式,但我真的不知道如何從一個班級到另一個班級使用它。
- - - - - - - - - - - - - - 編輯: - - - - - - - - - - - ------
我在一個檔案中有兩個類,一個用于主 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 函式,但我真的不知道如何從一個班級到另一個班級使用它。
uj5u.com熱心網友回復:
我對您的代碼進行了一些更改。
代碼在相關位置插入了注釋,詳細說明了所有更改。
主要的是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在每個前加上“自我”。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/357580.html
