如何使 Tk 小部件从左到右、然后从上到下流动?

问题描述 投票:0回答:1

我必须在一个框架中显示数十个单选按钮(按三个分组),并希望它们像文本一样流动:从左到右,当该行已满时,在下面创建第二行。
你会怎么做?

编辑:在一些好的评论之后我得到了这个:

import tkinter

root = tkinter.Tk()
root.title('Elementario')
root.attributes("-fullscreen", True)

text = tkinter.Text(root, wrap=tkinter.WORD)
text.pack(fill=tkinter.BOTH)

modules = [
    {'name':'reset_display'},
    {'name':'number_to_bin_str'},
    {'name':'number_to_dec_str'},
    {'name':'number_to_hex_str'},
    {'name':'list_to_number'},
    {'name':'list_to_bin_str'},
    {'name':'list_to_dec_str'}]

mod_vars = {}

for mod in modules:
    name = mod['name']
    rb_frame = tkinter.Frame(text)
    rb_frame.pack()
    label = tkinter.Label(rb_frame, text=name)
    label.grid(row=0, column=0)
    mod_vars[name] = tkinter.StringVar(value="0")
    rb_T = tkinter.Radiobutton(rb_frame, text="T",
            variable=mod_vars[name], value="T",)
    rb_T.grid(row=0, column=2)
    rb_U = tkinter.Radiobutton(rb_frame, text="U",
            variable=mod_vars[name], value="U")
    rb_U.grid(row=0, column=3)

root.mainloop()

单选按钮位于文本小部件的中心,我找不到使它们从左到右然后从上到下流动的方法。

python user-interface tkinter
1个回答
0
投票

您需要使用

text.window_create("end", window=rb_frame)
将这些框架放入文本小部件中。

以下是修改后的代码:

import tkinter

root = tkinter.Tk()
root.title('Elementario')
#root.attributes("-fullscreen", True)
root.geometry("600x300") # use smaller window to show the effect

text = tkinter.Text(root, wrap=tkinter.WORD)
text.pack(fill=tkinter.BOTH, expand=1)

modules = [
    {'name':'reset_display'},
    {'name':'number_to_bin_str'},
    {'name':'number_to_dec_str'},
    {'name':'number_to_hex_str'},
    {'name':'list_to_number'},
    {'name':'list_to_bin_str'},
    {'name':'list_to_dec_str'}]

mod_vars = {}

for mod in modules:
    name = mod['name']
    # give the frame a border to show the effect easier
    rb_frame = tkinter.Frame(text, bd=1, relief="solid", bg="white")
    #rb_frame.pack()
    label = tkinter.Label(rb_frame, text=f"{name}:")
    label.grid(row=0, column=0)
    mod_vars[name] = tkinter.StringVar(value="0")
    rb_T = tkinter.Radiobutton(rb_frame, text="T",
            variable=mod_vars[name], value="T",)
    rb_T.grid(row=0, column=2)
    rb_U = tkinter.Radiobutton(rb_frame, text="U",
            variable=mod_vars[name], value="U")
    rb_U.grid(row=0, column=3)

    # put the frame into the text widget
    text.window_create("end", window=rb_frame, padx=1, pady=1)

root.mainloop()

结果:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.