2

2つのテキストボックスウィジェットを並べて作成しました。左側のテキストボックスには、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()
4

2 に答える 2

1

私はこの1時間になりましたが、私のTkinterの知識は私が望むほど完全ではないので、他の誰かが別の答えを持ってくると確信していますが:

ボックスは実際には表示されていません。Text私が知る限り、ボックスはCheckBox後に続くsによって隠されています。checkbox_text.insert(END, "some text")背景をに変更してみると"red"、100個のチェックボックスを2つだけ描画するように変更しても、画面に表示されないことがわかります。の高さ制限Textが尊重されない理由はわかりませんが、grid' sのingはCheckBoxそれと関係があるに違いありません。

同じ問題が影響を及ぼしています。これScrollBarは左側Frameにあり、Text;ではありません。Text試したことはありませんが、付けたいものを作ってから作ってみるといいかもしれません。

同期していないことについての他の質問は、このweightように設定の問題である可能性がありますが、私にはうまくいきませんでした。それは、サイズを相互に伝達できないため、同じグリッドの一部ではないためだと思います。どちらも同じサイズで、最高だと思います。Frames

遅くて、ここのことはおそらく間違っているので、これをすべて塩と一緒に取ってください。

私の問題に関連するウィジェットで行うのが好きなデバッグ作業がいくつか.config(bg="RED")あり、それが何が起こっているのかを正確に視覚化するのに役立つ場合があります。

于 2013-02-19T05:38:05.850 に答える
1

埋め込みオブジェクト(チェックボタンウィジェット)を挿入するには、window_createというテキストウィジェットのメソッドを使用する必要がありました。実装方法は次のとおりです。これが他の人に役立つことを願っています:

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")
于 2013-02-20T03:59:17.977 に答える