python - tkinter Python 中不可见的按钮和表格
问题描述
我试图通过画布添加滚动条,并在画布中添加了一个名为frametwo的框架。我在该框架中添加了几个按钮和一个表格,但什么都看不到。如果我在根目录中添加所有这些东西,那么它们就会变得可见。我尝试了不同的东西,但没有任何效果。这是我写的代码
import myvariant
from tkinter import ttk
from tkinter import *
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from pandas import DataFrame
from PIL import ImageTk, Image
rsid_list=[8,9,5,5]
mv = myvariant.MyVariantInfo()
def main():
main_window = Tk()
app = info(main_window)
main_window.mainloop()
class info:
def __init__(self, root):
self.root = root
self.root.title('VCESS-ExAC')
self.root.geometry('1600x800+0+0')
self.root.configure(background='light grey')
main_frame = Frame(self.root)
main_frame.pack(fill=BOTH, expand=1, padx=0, pady=0)
main_frame.place(x=0, y=0, width=1600, height=800)
my_canvas = Canvas(main_frame)
my_canvas.pack(side=LEFT, fill=BOTH, expand=1)
my_scroll = ttk.Scrollbar(main_frame, orient=VERTICAL, command=my_canvas.yview)
my_scroll.pack(side=RIGHT, fill=Y)
my_canvas.configure(yscrollcommand=my_scroll.set)
my_canvas.bind('<Configure>', lambda e: my_canvas.config(scrollregion=my_canvas.bbox(ALL)))
self.frametwo = Frame(my_canvas)
my_canvas.create_window((0, 0), window=self.frametwo, anchor='nw')
table1 = LabelFrame(self.root, text="Retreived Data") ################
table1.pack(fill="both", expand="yes", padx=0, pady=0) ###################
table1.place(x=40, y=250, width=250, height=380)
table = ttk.Treeview(table1, height="8") #################
table['columns'] = ['rsID']
table.column('#0', width=120, minwidth=25)
table.column('rsID', anchor=W, width=120)
table.heading('#0', text='Serial No.', anchor=W)
table.heading('rsID', text='rsID', anchor=W)
for i in range(len(rsid_list)):
table.insert(parent='', index='end', iid=i, text=i + 1,
values=(rsid_list[i]))
table.place(x=0, y=0) ##########################
# VERTICAL SCROLLBAR
yscrollbar = ttk.Scrollbar(table1, orient=VERTICAL, command=table.yview) #############
yscrollbar.pack(side=RIGHT, fill='y') ##################
# HORIZONTAL SCROLLBAR
xscrollbar = ttk.Scrollbar(table1, orient=HORIZONTAL, command=table.xview) ###################
xscrollbar.pack(side=BOTTOM, fill='x') #######################
table.configure(yscrollcommand=yscrollbar.set, xscrollcommand=xscrollbar.set) ##############
table.pack(side=LEFT)
btn_download = Button(self.frametwo, text='Save File',
font=("Times New Roman", 14, 'bold'), bd=3, relief=RIDGE,
cursor='hand2', bg='#154857', fg='white', activeforeground='white',
activebackground='#154857')
btn_download.place(x=190, y=640, width=120)
btn_graph = Button(self.frametwo, text='Graph',
font=("Times New Roman", 14, 'bold'), bd=3, relief=RIDGE,
cursor='hand2', bg='#154857', fg='white', activeforeground='white',
activebackground='#154857')
btn_graph.place(x=530, y=640, width=120)
if __name__ == '__main__':
main()
期待任何可能的解决方案。
解决方案
你已经在里面创建了按钮self.frametwo
。您正在使用place
,这意味着按钮不会影响框架的大小。由于您没有给出self.frametwo
尺寸,它默认为 1 像素宽和 1 像素高。因此,框架本质上是不可见的,因此框架内的所有按钮都是不可见的。
pack
您可以通过切换到使用或grid
按钮轻松看到这一点。当您使用pack
orgrid
时,默认情况下父框架将增长或缩小以适应其子框架。因此,将其中任何一个用于按钮都会导致框架变得足够大以显示按钮。
我正在添加......该框架中的一个表格,但什么都看不到。
您没有将表格添加到框架中,而是将其添加到根窗口。如果要将其添加到框架中,则必须将框架用作其父级。同样,您可能不应该使用place
. place
除非您准备做很多额外的工作来确保小部件可见并响应小部件大小、字体大小、显示分辨率等的变化,否则这几乎永远不是正确的选择。
推荐阅读
- excel - 来自多个查询的多维数据集字段作为数据透视表 VBA 的值
- javascript - 如何通过 Id 从 Formik 中删除嵌套对象?
- azure-active-directory - 登录 oidc 与 aad/回调
- python-3.x - 尝试迭代数据框中的行
- reactjs - 反应验证错误
- scala - 为什么 Play 动作是单线程的?
- c# - Process.Start 失败并声称“目录名称无效。”
- c# - 使用 OneOf 的 API
- java - 如果参数不包含单引号然后被单引号包围,是否可以执行 SQL 注入?
- eclipse - 如何在 Xtext 中禁用 DslValidator 的自动生成