Python 设置为在多个窗口中显示的Tkinter小部件将在同一窗口中显示
因此,我的python程序中有几个不同的小部件:Python 设置为在多个窗口中显示的Tkinter小部件将在同一窗口中显示,python,tkinter,Python,Tkinter,因此,我的python程序中有几个不同的小部件:infobar和texteditor在我的App类中命令行和输出。但当我运行程序时,命令行和输出会出现在我的应用程序窗口中 class Terminal(Frame): ### A window used for running Terminal commands. def __init__(self, master): ### Initialize the Terminal app. # Initialize frame
infobar
和texteditor
在我的App
类中<在我的终端
类中,code>命令行和输出
。但当我运行程序时,命令行和输出会出现在我的应用程序窗口中
class Terminal(Frame):
### A window used for running Terminal commands.
def __init__(self, master):
### Initialize the Terminal app.
# Initialize frame
frame = Frame(terminalroot)
frame.pack()
# Create fonts
txtFont = tkFont.Font(family="Monaco",size=10)
# Initilize Commandline.
self.commandline = Text(wrap=None,font=txtFont,width=40,height=1)
self.commandline.pack()
# Initialize Output.
self.output = Text(wrap=WORD,font=txtFont,width=40,height=30)
self.output.pack()
class App(Frame):
### The main application window.
def __init__(self, master):
### Initialize the program.
## Initialize the frame
## Setup the frame.
## Set the title of the window.
## Pack the frame.
## Initialize random class variables.
## Create fonts.
## txtFont: Monaco, size 10. Used for most of the text areas.
## Create and pack the editor.
## Wrap text along words.
## Set size to W120 and H20.
## Insert a short message to the text editor.
## Reset any undo/redos.
## Pack the editor.
## Setup tags.
## Alert, sel.
## Create and pack the info bar.
## Set size to W120 and H1.
## Insert Info bar to the info bar.
## Setup the menu bar.
## File:
## Save, ^S, save_it
## Save as, ^[shift]S, save_it_as
## Load, ^L, load_it_and_clear
## Import, ^I, load_it
## Edit:
## Undo, ^Z, undo
## Redo, ^Y, redo
## Style:
## Default, no shortcut, set_theme_default
## White on Black, no shortcut, set_theme_wob
## Homebrew, no shortcut, set_theme_hbrew
## Setup the popup menu.
## Undo, ^Z, undo
## Redo, ^Y, redo
## Bind various commands.
## Final configuration.
self.frame = Frame(root, background="black")
root.title("BasicEdit")
self.frame.pack()
self.filename = "Hello World.txt"
txtFont = tkFont.Font(family="Monaco", size=10)
self.texteditor = Text(wrap=WORD,font=txtFont,width=120,height=20)
self.texteditor.insert(END, """Lorem epsum...""")
self.texteditor.edit_reset()
self.texteditor.pack()
self.texteditor.tag_config("alert", foreground="white", background="black")
self.texteditor.tag_config("sel", foreground="blue")
self.infobar = Text(font=txtFont,height=1,width=120)
self.infobar.insert(END, "Info bar")
self.infobar.pack()
self.menubar = Menu()
self.filemenu = Menu(self.menubar, tearoff=0)
self.filemenu.add_command(label="Save", command=self.save_it, accelerator="Ctrl+S")
self.filemenu.add_command(label="Save as", command=self.save_it_as, accelerator="Ctrl+Shift+S")
self.filemenu.add_command(label="Load", command=self.load_it_and_clear, accelerator="Ctrl+L")
self.filemenu.add_command(label="Import", command=self.load_it, accelerator="Ctrl+I")
self.editmenu = Menu(self.menubar, tearoff=0)
self.editmenu.add_command(label="Undo", command=self.undo, accelerator="Ctrl+Z")
self.editmenu.add_command(label="Redo", command=self.redo, accelerator="Ctrl+Y")
self.stylemenu = Menu(self.menubar, tearoff=0)
self.stylemenu.add_command(label="Default", command=self.set_theme_default)
self.stylemenu.add_command(label="White on Black", command=self.set_theme_wob)
self.stylemenu.add_command(label="Homebrew", command=self.set_theme_hbrew)
self.menubar.add_cascade(label="File", menu=self.filemenu)
self.menubar.add_cascade(label="Edit", menu=self.editmenu)
self.menubar.add_cascade(label="Style", menu=self.stylemenu)
self.popup = Menu(tearoff=1)
self.popup.add_command(label="Undo", command=self.undo, accelerator="Ctrl+Z")
self.popup.add_command(label="Redo", command=self.redo, accelerator="Ctrl+Y")
root.bind("<Button-2>", self.rightmenu)
root.bind("<Control-q>", self.quit)
root.bind("<Control-Q>", self.quit)
root.bind("<Control-s>", self.save_it)
root.bind("<Control-S>", self.save_it)
root.bind("<Control-l>", self.load_it_and_clear)
root.bind("<Control-L>", self.load_it_and_clear)
root.bind("<Control-i>", self.load_it)
root.bind("<Control-I>", self.load_it)
root.bind("<Control-z>", self.undo)
root.bind("<Control-Z>", self.undo)
root.bind("<Control-y>", self.redo)
root.bind("<Control-Y>", self.redo)
root.bind("<Key>", self.keyPress)
self.set_theme_default()
root.config(menu=self.menubar)
类终端(帧):
###用于运行终端命令的窗口。
定义初始(自我,主):
###初始化终端应用程序。
#初始化帧
帧=帧(终端根)
frame.pack()
#创建字体
txtFont=tkFont.Font(family=“Monaco”,size=10)
#初始化命令行。
self.commandline=Text(wrap=None,font=txtFont,width=40,height=1)
self.commandline.pack()
#初始化输出。
self.output=Text(wrap=WORD,font=txtFont,width=40,height=30)
self.output.pack()
类应用程序(框架):
###主应用程序窗口。
定义初始(自我,主):
###初始化程序。
##初始化帧
##设置框架。
##设置窗口的标题。
##把架子打包。
##初始化随机类变量。
##创建字体。
##txtFont:摩纳哥,10号。用于大多数文本区域。
##创建并打包编辑器。
##用单词包装文本。
##将大小设置为W120和H20。
##在文本编辑器中插入短消息。
##重置任何撤消/重做。
##打包编辑器。
##设置标签。
##警惕,赛尔。
##创建并打包信息栏。
##将大小设置为W120和H1。
##将信息栏插入信息栏。
##设置菜单栏。
##文件:
##保存,^S,保存它
##另存为,^[shift]S,另存为
##加载,^L,加载并清除
##导入,^I,加载它
##编辑:
##撤消,^Z,撤消
##重做,^Y,重做
##风格:
##默认,无快捷方式,设置\u主题\u默认
##黑白相间,没有捷径,设定主题
##自制,无捷径,设置主题
##设置弹出菜单。
##撤消,^Z,撤消
##重做,^Y,重做
##绑定各种命令。
##最终配置。
self.frame=frame(根,背景=“黑色”)
根标题(“基本名称”)
self.frame.pack()
self.filename=“Hello World.txt”
txtFont=tkFont.Font(family=“Monaco”,size=10)
self.texteditor=Text(wrap=WORD,font=txtFont,width=120,height=20)
self.texteditor.insert(结束,““Lorem epsum…”)
self.texteditor.edit_reset()
self.texteditor.pack()
self.texteditor.tag_config(“警报”,前台=“白色”,后台=“黑色”)
self.texteditor.tag_config(“sel”,前台=“蓝色”)
self.infobar=Text(font=txtFont,高度=1,宽度=120)
self.infobar.insert(结束,“信息栏”)
self.infobar.pack()
self.menubar=菜单()
self.filemenu=Menu(self.menubar,tearoff=0)
self.filemenu.add_命令(label=“Save”,command=self.Save_it,accelerator=“Ctrl+S”)
self.filemenu.add_命令(label=“Save as”,command=self.Save_it_as,accelerator=“Ctrl+Shift+S”)
self.filemenu.add_命令(label=“Load”,command=self.Load_it_和_clear,accelerator=“Ctrl+L”)
self.filemenu.add_命令(label=“Import”,command=self.load_it,accelerator=“Ctrl+I”)
self.editmenu=菜单(self.menubar,tearof=0)
self.editmenu.add_命令(label=“Undo”,command=self.Undo,accelerator=“Ctrl+Z”)
self.editmenu.add_命令(label=“Redo”,command=self.Redo,accelerator=“Ctrl+Y”)
self.stylemenu=Menu(self.menubar,tearof=0)
self.stylemenu.add\u命令(label=“Default”,command=self.set\u主题\u默认)
self.stylemenu.add_命令(label=“黑底白”,command=self.set_主题_-wob)
self.stylemenu.add_命令(label=“Homebrew”,command=self.set_theme\u hbrew)
self.menubar.add\u级联(label=“File”,menu=self.filemenu)
self.menubar.add\u级联(label=“Edit”,menu=self.editmenu)
self.menubar.add\u级联(label=“Style”,menu=self.stylemenu)
self.popup=菜单(tearoff=1)
self.popup.add_命令(label=“Undo”,command=self.Undo,accelerator=“Ctrl+Z”)
self.popup.add_命令(label=“Redo”,command=self.Redo,accelerator=“Ctrl+Y”)
root.bind(“,self.rightmenu)
root.bind(“,self.quit)
root.bind(“,self.quit)
root.bind(“,self.save\u它)
root.bind(“,self.save\u它)
root.bind(“,self.load\u it\u和\u clear)
root.bind(“,self.load\u it\u和\u clear)
root.bind(“,self.load\u it)
root.bind(“,self.load\u it)
root.bind(“,self.undo)
root.bind(“,self.undo)
root.bind(“,self.redo)
root.bind(“,self.redo)
root.bind(“,self.keyPress)
self.set_theme_default()
root.config(menu=self.menubar)
请注意,除了在正确的窗口中定位我的小部件之外,所有代码都可以工作。
如果您不告诉小部件其父窗口是什么,则默认为根窗口。在许多小部件中,您没有设置父窗口。您应该始终定义父窗口 在继承自
Frame
或Toplevel
的类中定义小部件时尤其如此。当你这样做的时候,假设这个类是自包含的——所有的东西都是这个类的子类。当一些小部件成为根窗口的子部件时,您的代码将变得难以理解,因为您无法对哪些小部件属于哪些父部件做出任何假设
请注意,您的terminal类是Frame
的子类,但您将命令行和输出窗口放在根窗口中(由于不将其放在其他任何地方):
同样地:
class App(Frame):
def __init__(self, master):
...
self.texteditor = Text(wrap=WORD,font=txtFont,width=120,height=20)
上述每个文本小部件都应该使用self
作为text
小部件的父级,以便子小部件出现在框架
小部件中。例如:
self.texteditor = text(self, wrap=WORD, ...)
我认为您没有设置变量所属的窗口。将变量定义为小部件时,您可以控制它所属的父窗口,即更改为<
self.texteditor = text(self, wrap=WORD, ...)