英文:
Element in Tkinter window below existing Frame
问题
我想使用Tkinter在Python中创建一个程序。它会生成多种类型的输出,每种输出需要不同的输入。
为了区分不同的输入,我使用多个选项卡。
然后,有一些输入对所有输出都是相同的;是否可以将它们的输入放在窗口上,与选项卡无关?
Python程序如下:
from tkinter import *
window = Tk()
tabControl = ttk.Notebook(window)
tabMakeTea = ttk.Frame(tabControl); tabControl.add(tabMakeTea, text="制茶")
tabMakeCoffee = ttk.Frame(tabControl); tabControl.add(tabMakeCoffee, text="制咖啡")
tabControl.pack(expand=1, fill="both")
window.mainloop()
现在我将继续在每个选项卡中添加元素;接下来,我需要一些东西,无论你在“制茶”或“制咖啡”选项卡中都应该可见。
首先,我将相同的输入放在多个框架中,希望数据将从相应(活动的)框架中读取,但Python从一个(始终相同的)输入中读取值。
接下来,我尝试将元素放在window
元素上,以便无论框架如何都可见,但这似乎不起作用:
Label(window, text="糖: ").grid(row=0, column=0)
目前,我为这种类型的输入有另一个Frame
,但我发现这不太用户友好。
请问有人可以建议如何实现这个需求吗?
我尝试将元素直接放在“window”元素上,结果出现错误“无法在已经由pack管理的.内使用网格几何管理器”。
我尝试过在谷歌上搜索“将元素添加到多个框架”和“将元素放在Frame元素下的窗口上”都没有成功。
英文:
I want to create a program in Python using Tkinter. It creates several types of outputs, which need different inputs each..
To separate different inputs, i use multiple tabs.
Then, there are inputs which are same for all outputs; is it possible to put their Inputs onto the window, unrelated to the tabs?
The window should look a bit like this with the Radio Buttons always visible:
The python program is:
from tkinter import *
window = Tk()
tabControl = ttk.Notebook(window)
tabMakeTea = ttk.Frame(tabControl); tabControl.add(tabMakeTea, text = "Make tea")
tabMakeCoffee = ttk.Frame(tabControl); tabControl.add(tabMakeCoffee, text = "Make coffee")
tabControl.pack(expand = 1, fill="both")
window.mainloop()
Now i continue with elements within each Frame; next i need things that should be visible no matter if you are in "tea" or "coffee" tab.
First i placed same inputs to multiple Frames, hoping the data will be read from the respective (active) Frame, but Python reads values from one (always the same) inputs.
Next, i tried to place elements to the window
element so that it is always visible regardless of the Frame, but this doesn't seem to work:
Label(window, text = "Sugar: ").grid(row=0, column=0)
Right now i have another Frame
for this kind of inputs, but i find it not very user-friendly.
Could you anybody please advise how to get to the
i tried placing the element straight to the "window" element, which results in error "cannot use geometry manager grid inside . which already has slaves managed by pack".
i tried googling "adding element to multiple frames" and "placing element on window bellow Frame element" with no success
答案1
得分: 1
如果你想要将小部件放在选项卡控件之外,只需将它们设为根窗口的子级,而不是选项卡控件。
from tkinter import *
window = Tk()
tabControl = ttk.Notebook(window)
tabMakeTea = ttk.Frame(tabControl) # this widget is a child of tabControl
tabControl.add(tabMakeTea, text="制茶")
tabMakeCoffee = ttk.Frame(tabControl) # this widget is also a child of tabControl
tabControl.add(tabMakeCoffee, text="制咖啡")
tabControl.pack(expand=True, fill="both")
new_frame = Frame(window) # this Frame is a child of the root window
new_frame.pack(expand=True, fill='both')
# this example button is a child of 'new_frame' and should appear below 'tabControl'
new_button = ttk.Button(new_frame, text='你好')
new_button.pack(expand=False, fill='none')
window.mainloop()
英文:
If you want widgets outside of your tab control, you only need to make them children of the root window instead of the tab control
from tkinter import *
window = Tk()
tabControl = ttk.Notebook(window)
tabMakeTea = ttk.Frame(tabControl) # this widget is a child of tabControl
tabControl.add(tabMakeTea, text = "Make tea")
tabMakeCoffee = ttk.Frame(tabControl) # this widget is a also child of tabControl
tabControl.add(tabMakeCoffee, text = "Make coffee")
tabControl.pack(expand=True, fill="both")
new_frame = Frame(window) # this Frame is a child of the root window
new_frame.pack(expand=True, fill='both')
# this example button is a child of 'new_frame', and should appear below 'tabControl'
new_button = ttk.Button(new_frame, text='Hello')
new_button.pack(expand=False, fill='none')
window.mainloop()
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论