如何解决如何在一个 Tkinter 框架中添加多个表
我在 python 中使用了一个名为 tkintertable 的库,它基本上使我能够有效地将表添加到我的 Tkinter 应用程序中。我正在尝试设置 6 个不同的表格,其中包含 6 个图表,以便与此框架中的每个表格(本质上是我的主页)一起使用,但我对 tkinter 来说是新手,因此在组织它时遇到了一些麻烦,目前我的代码如下所示:
import tkinter as tk
from tkintertable import TableCanvas,TableModel
class MainApplication(tk.Tk):
"""Main application class"""
def __init__(self,*args,**kwargs):
tk.Tk.__init__(self)
self._frame = None
self.switch_frame(TickerInput,None)
def switch_frame(self,frame_class,ticker):
"""Destroys current frame and replaces it with a new one."""
if ticker is not None:
new_frame = frame_class(self,ticker)
else:
new_frame = frame_class(self)
if self._frame is not None:
self._frame.destroy()
self._frame = new_frame
self._frame.grid()
class TickerInput(tk.Frame):
"""Ticker input page that allows input of ticker and redirects to main indicator page"""
def __init__(self,master):
tk.Frame.__init__(self,master,background="#212020")
# Centers the frame
self.master.columnconfigure(0,weight=1)
self.master.rowconfigure(0,weight=1)
ticker_label = tk.Label(self,text="Enter ticker..")
ticker_label.grid(row=0,column=1,columnspan=2)
ticker_input = tk.Entry(self,width=35)
ticker_input.grid(row=0,column=3)
button = tk.Button(self,text="Search",command=lambda: master.switch_frame(Indicator,ticker_input.get()))
button.grid(row=1,columnspan=3)
class Indicator(tk.Frame):
"""Indicator page that shows the indicators and whether its a buy or sell"""
def __init__(self,ticker):
tk.Frame.__init__(self,master)
self.ticker = ticker
self.master.columnconfigure(0,weight=0)
self.master.rowconfigure(0,weight=1)
self.columnconfigure(0,weight=1)
self.rowconfigure(0,weight=1)
button = tk.Button(self,text="Go Back",command=lambda: master.switch_frame(TickerInput,None))
button.grid(column=0,row=0)
ticker_label = tk.Label(self,text=("Current Ticker: " + self.ticker))
ticker_label.grid(column=1,row=0)
tableOne = Table(self)
tableOne.grid(column=0,row=1)
tableOne.createTable()
# tableTwo = Table(self)
# tableTwo.createTable()
class Table(tk.Frame):
def __init__(self,master)
self.master = master
def createTable(self):
data = {'rec1': {'col1': 99.88,'col2': 108.79,'label': 'rec1'},'rec2': {'col1': 99.88,'label': 'rec2'}
}
model = TableModel()
table = TableCanvas(self.master,model=model,data=data)
table.show()
return table
if __name__ == "__main__":
app = MainApplication()
app.title("Indicator Trading Confirmation Tool")
app.geometry("1920x1080")
app.config(background="#121212")
app.mainloop()
这是图形用户界面
如果我把它放在不同的行并且我的权重设置为 1,这应该将它们分开 50% 正确,为什么我的返回按钮卡在桌子上?以及组织这两个网格/代码相关的最佳方法是什么,以确保 GUI 具有 6 个相等的表格/图表,左侧 3 个,右侧 3 个?谢谢!
解决方法
好的,我们一步一步来,
-
用彩色框架替换了你的
Table
类,对我来说没有任何重叠,所以这可能只是由于表格本身的布局 - 快速修复可能是添加一些填充 -
weight
选项用于在调整窗口大小时分配额外空间,有关更多信息,您可以查看 here,还有一个很好的可视化发现 {{3} }
为了使用 weight
来控制实际使用的 width
或 height
小部件,您可能需要查看 {{1} 的 sticky
选项}
here 要获得非常好的概述,您还可以查看 see 对两者都非常详细
- 对于您的总体布局,您可以简单地组合
grid
和weight
选项,如下所示:
sticky
宽度为 50:50,高度为 33:33:33。 如果您稍后想在框架中添加类似菜单栏的内容,您可能希望将表格框架捆绑在另一个框架中,以便使它们的大小相同
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。