Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.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:使用Checkbutton+;文本小部件中的滚动条_Python_Tkinter - Fatal编程技术网

Python Tkinter:使用Checkbutton+;文本小部件中的滚动条

Python Tkinter:使用Checkbutton+;文本小部件中的滚动条,python,tkinter,Python,Tkinter,我已经创建了两个并排的文本框小部件。左侧文本框包含100行复选框。右侧文本框包含100行文本。我已经将两个文本框配置为具有相同的高度30和宽度10 当我运行该程序时,左侧文本框垂直增长,超出了可查看屏幕区域的大小。结果,右边的文本框被向下推得太远,我再也看不到它了。我知道它就在那里,因为当我将行数(对于两个框)减少到50(相对于100)时,我可以看到正确的文本框 另外,我注意到左侧滚动条没有连接到左侧文本框。但是,右侧滚动条已正确连接到右侧文本框 请你帮我理解一下: 1) 为什么左侧文本框垂直增

我已经创建了两个并排的文本框小部件。左侧文本框包含100行复选框。右侧文本框包含100行文本。我已经将两个文本框配置为具有相同的高度30和宽度10

当我运行该程序时,左侧文本框垂直增长,超出了可查看屏幕区域的大小。结果,右边的文本框被向下推得太远,我再也看不到它了。我知道它就在那里,因为当我将行数(对于两个框)减少到50(相对于100)时,我可以看到正确的文本框

另外,我注意到左侧滚动条没有连接到左侧文本框。但是,右侧滚动条已正确连接到右侧文本框

请你帮我理解一下:

1) 为什么左侧文本框垂直增长(超出定义的文本小部件大小),并且与右侧文本框的大小和位置不同步

2) 为什么左滚动条没有连接到左文本小部件(如右文本框)

以下是我目前的代码:

#!/usr/bin/python
from Tkinter import *

class MyApp:
    def __init__(self, parent):
       self.myParent = parent
       self.main_container = Frame(self.myParent)
       self.main_container.grid(row=0, column=0, columnspan=4)

       self.left_frame = Frame(self.main_container)
       self.left_frame.grid(row=0, column=0, columnspan=2)

       self.right_frame = Frame(self.main_container)
       self.right_frame.grid(row=0, column=2, columnspan=2)

       self.checkbox_scrollbar = Scrollbar(self.left_frame)
       self.checkbox_scrollbar.grid(row=0, column=1, sticky='NS')
       self.checkbox_text = Text(self.left_frame, height=30, width=10, yscrollcommand=self.checkbox_scrollbar.set)
       self.checkbox_text.grid(row=0, column=0)
       self.checkbox_scrollbar.config(command=self.checkbox_text.yview)

       self.databox_scrollbar = Scrollbar(self.right_frame)
       self.databox_scrollbar.grid(row=0, column=1, sticky='NS')
       self.databox_text = Text(self.right_frame, height=30, width=10, yscrollcommand=self.databox_scrollbar.set)
       self.databox_text.grid(row=0, column=0)
       self.databox_scrollbar.config(command=self.databox_text.yview)

    my_dict = {}
    for each_num in range(100):
        my_line = "Line number: " + str(each_num)
        my_dict[my_line] = 0

    for my_key in my_dict:
        my_dict[my_key] = IntVar()
        cb = Checkbutton(self.checkbox_text, text=my_key, variable=my_dict[my_key])
        cb.grid(sticky='W')

    for each_entry in range(100):
        entry_line = "This is entry number: " + str(each_entry) + "\n"
        self.databox_text.insert(END, entry_line)


root = Tk()
root.title("Checkbox UI Test")
myapp = MyApp(root)
root.mainloop()

我已经在这里呆了一个小时了,但是我的Tkinter知识没有我想要的那么完整,所以我相信其他人会给出另一个答案,但是:

文本
框实际上没有显示,据我所知,它被后面的
复选框
隐藏了。尝试
复选框\u text.插入(结束,“一些文本”)
并将背景更改为
“红色”
,您将看到它在屏幕上不可见,即使您将100个复选框更改为仅绘制2。我不确定为什么
文本的高度限制没有得到遵守,但是
复选框的
网格
”一定与此有关

同样的问题影响了
滚动条
,它附加到左侧的
框架
,而不是
文本
;我还没有尝试过,但是在创建了要附加的
文本之后创建它可能会有所帮助

你关于它不同步的另一个问题可能是设置
重量
,比如,但它对我不起作用。我认为这可能是因为它们不是同一个网格的一部分,因为它们不能相互传达它们的大小。两个
大小相同,我认为这是它所能做的最好的了

现在已经很晚了,我可能对这里的东西错了,所以请不要客气


如果在与我的问题相关的小部件上执行
.config(bg=“RED”)
,我喜欢做一些调试工作,有时这会帮助我准确地可视化正在发生的事情。

我需要使用名为window\u create的文本小部件方法插入我的嵌入对象(我的checkbutton小部件)。下面是如何实现它。希望这能帮助其他人:

for my_key in my_dict:
    my_dict[my_key] = IntVar()
    cb = Checkbutton(text=my_key, variable=my_dict[my_key])
    self.checkbox_text.window_create("END", window=cb)
    self.checkbox_text.insert("END", "\n")

谢谢你的建议。经过多次尝试和错误,我发现解决方案是使用文本小部件的window_create方法嵌入对象(例如我的checkbutton对象)。@DirtyPenguin噢,很高兴你已经搞定了。对不起,我帮不了你更多。别担心。您关于更改背景颜色的建议对于调试非常有用。我会记住它的前进方向。再次感谢。