Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python tkinter帆布带X&;Y滚动条未使用CheckboxTreeview显示Y滚动条或填充框_Python_Tkinter_Tkinter Canvas - Fatal编程技术网

Python tkinter帆布带X&;Y滚动条未使用CheckboxTreeview显示Y滚动条或填充框

Python tkinter帆布带X&;Y滚动条未使用CheckboxTreeview显示Y滚动条或填充框,python,tkinter,tkinter-canvas,Python,Tkinter,Tkinter Canvas,我正在尝试使用博客文章中关于使用画布创建滚动条的信息,在一个包含x和y滚动条的框架中显示CheckboxTreeview import tkinter as tk from tkinter import ttk from ttkwidgets import CheckboxTreeview import sqlite3 INSERT_TRAIT = "INSERT into evaluation_trait_table (trait_name, trait_type, evaluat

我正在尝试使用博客文章中关于使用画布创建滚动条的信息,在一个包含x和y滚动条的框架中显示CheckboxTreeview

import tkinter as tk
from tkinter import ttk
from ttkwidgets import CheckboxTreeview
import sqlite3

INSERT_TRAIT = "INSERT into evaluation_trait_table (trait_name, trait_type, evaluation_trait_display_order) values (?, ?, ?);"

def add_trait(connection, trait_name, trait_type, evaluation_trait_display_order):
    with connection:
        connection.execute(INSERT_TRAIT, (trait_name, trait_type, evaluation_trait_display_order))

class ScrollableFrame(ttk.Frame):
    def __init__(self, container, *args, **kwargs):
        super().__init__(container, *args, **kwargs)
        canvas = tk.Canvas(self, width=500, height=300)
        yscrollbar = ttk.Scrollbar(self, orient="vertical", command=canvas.yview)
        xscrollbar = ttk.Scrollbar(self, orient="horizontal", command=canvas.xview)
        self.scrollable_frame = ttk.Frame(canvas)
        self.scrollable_frame.bind("<Configure>", lambda e: canvas.configure(scrollregion=canvas.bbox("all")))
        canvas.create_window((0, 0), window=self.scrollable_frame, anchor="nw")
        canvas.configure(yscrollcommand=yscrollbar.set)
        canvas.configure(xscrollcommand=xscrollbar.set)
        yscrollbar.pack(side="right", fill="y")
        xscrollbar.pack(side="bottom", fill="x")
        canvas.pack(side="left", fill="both", expand=True)

root = tk.Tk()
root.columnconfigure(0, weight=1)
root.rowconfigure(1, weight=1)
connection = sqlite3.connect('treeview_test_db.sqlite')

cmd = "CREATE TABLE if not exists evaluation_trait_table (id INTEGER PRIMARY KEY ,trait_name CHAR NOT NULL " \
             ",trait_type INTEGER,evaluation_trait_display_order INTEGER DEFAULT (null) ) "
connection.execute(cmd)
add_trait(connection,'Teeth Alignment', 1, 38)
add_trait(connection,'Missing Teeth', 1, 31)
add_trait(connection,'White on Nose', 1, 44)
add_trait(connection,'Head', 1, 21)
add_trait(connection,'Horn Shape', 1, 24)
add_trait(connection,'Body', 1, 3)
add_trait(connection,'Legs', 1, 27)
add_trait(connection,'White in Britch or Body', 1, 43)
add_trait(connection,'White on Nose', 1, 44)
add_trait(connection,'Udder Lumps', 1, 40)
add_trait(connection,'Fleece Quality', 1, 18)
add_trait(connection,'Fleece Soft', 1, 19)
add_trait(connection,'Fleece Length', 2, 17)
add_trait(connection,'Fleece Weight', 2, 20)
add_trait(connection,'Scrotal Circumference', 2, 35)
add_trait(connection,'Weight', 2, 42)
add_trait(connection,'Horn Buds', 1, 23)
add_trait(connection,'Temperament', 1, 39)
add_trait(connection,'Fleece Crimp', 1, 16)
add_trait(connection,'Insemination Depth', 2, 25)

my_frame = ScrollableFrame(root)
tree = CheckboxTreeview(my_frame.scrollable_frame
                        , column=("column1", "column2", "column3", "column4"), show=("headings", "tree"))
tree.heading("#0", text="Select")
tree.column("#0", minwidth=50, width=50)
tree.heading("#1", text="id_traitid")
tree.column("#1", minwidth=75, width=75)
tree.heading("#2", text="Trait Name")
tree.column("#2", minwidth=150, width=150)
tree.heading("#3", text="trait_type")
tree.column("#3", minwidth=150, width=150)
tree.heading("#4", text="evaluation_trait_display_order")
tree.column("#4", minwidth=150, width=150)
connection = sqlite3.connect('treeview_test_db.sqlite')
cursor = connection.cursor()
cmd = "select * from evaluation_trait_table"
cursor.execute(cmd)
rows = cursor.fetchall()
for row in rows:
    print(row)
    tree.insert('', 'end', values=row)
tree.pack()
my_frame.grid(row=0, column=0)

my_header_label = tk.Label(root, text='The frame below works properly with 2 scrollbars and fills the blank space in the canvas.', bg="white")
my_header_label.grid(row=1, column=0)

frame2 = ScrollableFrame(root)
frame2.grid(row=2, column=0)
for i in range(50):
    ttk.Label(frame2.scrollable_frame, text="Sample scrolling label that is really long to "
                                           "test if my 2 way scrolling works", width=900).pack()
frame3 = ScrollableFrame(root)
frame3.grid(row=2, column=1)
for i in range(50):
    ttk.Label(frame3.scrollable_frame, text="This is a second scrolling frame that I have gridded "
                                            "elsewhere. It is also a very long line to verify that the horixntal scrolling works.").pack()

root.mainloop()
将tkinter作为tk导入
从tkinter导入ttk
从ttkwidgets导入CheckboxTreeview
导入sqlite3
INSERT_TRAIT=“插入评估_TRAIT_表(特征名称、特征类型、评估_TRAIT_显示顺序)值(?、、?);”
def添加特征(连接、特征名称、特征类型、评估特征显示顺序):
连接:
执行(插入特征,(特征名称、特征类型、评估特征显示顺序))
类ScrollableFrame(ttk.Frame):
定义初始化(self,container,*args,**kwargs):
super()
canvas=tk.canvas(自身,宽度=500,高度=300)
yscrollbar=ttk.Scrollbar(self,orient=“vertical”,command=canvas.yview)
xscrollbar=ttk.Scrollbar(self,orient=“horizontal”,command=canvas.xview)
self.scrollable_frame=ttk.frame(画布)
self.scrollable_frame.bind(“,lambda e:canvas.configure(scrollregion=canvas.bbox(“全部”))
canvas.create_window((0,0),window=self.scrollable_frame,anchor=“nw”)
configure(yscrollcommand=yscrollbar.set)
configure(xscrollcommand=xscrollbar.set)
yscrollbar.pack(side=“right”,fill=“y”)
xscrollbar.pack(side=“bottom”,fill=“x”)
canvas.pack(side=“left”,fill=“both”,expand=True)
root=tk.tk()
root.columnconfigure(0,权重=1)
rowconfigure(1,权重=1)
connection=sqlite3.connect('treeview\u test\u db.sqlite')
cmd=“如果不存在,则创建表求值\特性\表(id整数主键,特性\名称字符不为空”\
,特征类型整数,求值特征显示顺序整数默认值(null)
connection.execute(cmd)
添加特征(连接,“齿对齐”,1,38)
添加特征(连接,“缺齿”,1,31)
添加特征(连接,'White on Nose',1,44)
添加特征(连接,'Head',1,21)
添加特征(连接,“喇叭形”,1,24)
添加特征(连接,'Body',1,3)
添加特征(连接,'Legs',1,27)
添加特征(连接,'White in Britch或Body',1,43)
添加特征(连接,'White on Nose',1,44)
添加特征(连接,“乳房肿块”,1,40)
添加特征(连接,'Fleece Quality',1,18)
添加特征(连接,'Fleece Soft',1,19)
添加特征(连接,'Fleece Length',2,17)
添加特征(连接,'Fleece Weight',2,20)
添加特征(连接,“阴囊周长”,2,35)
添加特征(连接,'Weight',2,42)
添加特征(连接,'Horn Bubs',1,23)
添加特质(联系,“气质”,1,39)
添加特征(连接,“抓绒卷曲”,1,16)
添加_性状(连接,“授精深度”,2,25)
my_frame=ScrollableFrame(根目录)
tree=CheckboxTreeview(我的框架。可滚动的框架
,column=(“column1”、“column2”、“column3”、“column4”),show=(“标题”、“树”)
树标题(“0”,text=“选择”)
tree.column(“#0”,minwidth=50,width=50)
树标题(“1”,text=“id\u traitid”)
tree.column(“#1”,最小宽度=75,宽度=75)
树标题(“2”,text=“性状名称”)
tree.column(“#2”,minwidth=150,width=150)
树标题(“3”,text=“trait\u type”)
树.列(“#3”,最小宽度=150,宽度=150)
树标题(“4”,text=“评估、特征、显示、顺序”)
tree.column(“#4”,最小宽度=150,宽度=150)
connection=sqlite3.connect('treeview\u test\u db.sqlite')
cursor=connection.cursor()
cmd=“从评估表中选择*”
cursor.execute(cmd)
rows=cursor.fetchall()
对于行中的行:
打印(行)
插入(“”,'end',value=row)
tree.pack()
我的框架网格(行=0,列=0)
标签(root,text =)下面的框架用2个滚动条正常工作,并填充画布中的空白。
my_header_label.grid(行=1,列=0)
frame2=可滚动框架(根)
frame2.grid(行=2,列=0)
对于范围(50)内的i:
ttk.Label(frame2.scrollable\u frame,text=“示例滚动标签,非常长到”
“测试我的双向滚动是否有效”,宽度=900.pack()
frame3=可滚动框架(根)
框架3.网格(行=2,列=1)
对于范围(50)内的i:
ttk.Label(frame3.scrollable\u frame,text=“这是我已经网格化的第二个滚动框”
“在其他地方。验证水平滚动是否有效也是一条很长的线。”).pack()
root.mainloop()
第一个问题是垂直滚动条不显示在第一帧上。但是,将鼠标定位在框架中,我可以使用鼠标滚轮上下滚动

第二个问题是treeview不会垂直填充帧,而在循环中使用标签制作的帧会正确填充和滚动


有人知道为什么treeview不能工作以及如何修复它吗?

这是因为treeview的
高度
选项的默认值是10,所以只会显示10行。将
height
选项设置为插入所有数据后的行数:

...
rows = cursor.fetchall()
for row in rows:
    print(row)
    tree.insert('', 'end', values=row)
tree.config(height=len(rows))
tree.pack()
...

另外,Python文档中是否有任何地方告诉您这些隐藏的默认值?这不是我遇到的唯一一个问题,我必须承认,我已经重新阅读了文档,但仍然找不到它列出的位置。您可以在:
#define DEF_TREE_ROWS“10”
中找到它。