我想创建一个图形用户界面.有两个主要的下拉菜单.第一个用户 Select 课程的位置.第二种,用户 Select 一个数字,代码生成与 Select 数字对应的新的下拉菜单/菜单.代码运行正常,但第二个下拉菜单有问题.当我 Select 一个数字时,生成新的下拉菜单,但下拉菜单中我从右移 Select 一个数字.我想把它钉在第一个下拉菜单的旁边.有谁能帮帮我吗?非常感谢.

(粘性不起作用)

以下是代码.

import tkinter as tk
from tkinter import ttk


def on_dropdown_change(event):
    selected_value = int(dropdown_var.get())
    create_extra_dropdowns(selected_value)

def create_extra_dropdowns(count):
    for widget in extra_dropdown_frame.winfo_children():
        widget.destroy()
    for k, parameter in enumerate(parameters_list):
        # Create a checkbox for each parameter and associate it with the corresponding IntVar
        parameter_label = tk.Label(extra_dropdown_frame, text=parameter, width=10, anchor="w")
        parameter_label.grid(row=k+2, column=0, padx=1, pady=1, sticky="w")
    
    for i in range(count):
        dropdown_var = tk.StringVar()
        dropdown = ttk.Combobox(extra_dropdown_frame, textvariable=dropdown_var,width=7, values=["MT1", "MT2", "LAB", "QUIZ", "HW", "PROJE", "FİNAL"])
        dropdown.grid(row=0, column=i+1, padx=1, pady=1,sticky="w")

        # Her bir dropdown için 15 Entry Box eklemek
        for j in range(15):
            entry_var = tk.StringVar()
            entry_box = tk.Entry(extra_dropdown_frame, textvariable=entry_var,width=5)
            entry_box.grid(row=j+2, column=i+1, padx=5, pady=1,)

def main():
    global dropdown_var
    global extra_dropdown_frame
    global parameters_list
    global root

    root = tk.Tk()
    root.title("Dropdown ve Entry Örneği")
    root.geometry("1200x650")
    

    parameters1 = ["Signal and Systems", "Calculus1", "Calculus2", "Circuit Analysis", "Digital Systems 1"]
    dersler_parameter1 = tk.StringVar()
    dersler_parameter1.set("Dersler")  # Set the default value
    dersler_box1 = tk.OptionMenu(root, dersler_parameter1, *parameters1)
    dersler_box1.grid(row=0, column=0,padx=10, pady=10,sticky="w")
    # Ana dropdown oluşturma
    dropdown_var = tk.StringVar()
    dropdown = ttk.Combobox(root, textvariable=dropdown_var,width=5, values=[1, 2, 3, 4, 5, 6, 7])
    dropdown.grid(row=0, column=2, pady=1,sticky="w")
    dropdown.bind("<<ComboboxSelected>>", on_dropdown_change)
    
    parameters_list = ["ÖÇ1 :", "ÖÇ2 :", "ÖÇ3 :", "ÖÇ4 :", "ÖÇ5 :", "ÖÇ6 :",
                   "ÖÇ7 :", "ÖÇ8 :", "ÖÇ9 :", "ÖÇ10 :", "ÖÇ11 :",
                   "ÖÇ12 :", "ÖÇ13 :", "ÖÇ14 :", "ÖÇ15 :",]
    
    extra_dropdown_frame = tk.Frame(root)
    extra_dropdown_frame.grid(row=1, column=0, padx=10, pady=10)
    
    root.mainloop()

if __name__ == "__main__":
    main()

我试了试粘性的,但不起作用.

推荐答案

这个问题是,新元素的框架位于根元素的第0列中,它会将第1列中的任何内容推到右侧或更靠右,因为Tkinter中的列始终对齐.

要解决这个问题,您可以将顶部的两个元素(OptionMenu和ComboBox)放在第0列中各自的框架中,然后ComboBox不再位于根的第1列中,因此当第0列被新元素放大时,它不会被推到右侧.

相关代码片段(其余部分保持不变):

parameters1 = ["Signal and Systems", "Calculus1", "Calculus2", "Circuit Analysis", "Digital Systems 1"]
dersler_parameter1 = tk.StringVar()
dersler_parameter1.set("Dersler")  # Set the default value
top_frame = tk.Frame(root)
top_frame.grid(row=0, column=0, sticky="w")
dersler_box1 = tk.OptionMenu(top_frame, dersler_parameter1, *parameters1)
dersler_box1.grid(row=0, column=0,padx=10, pady=10,sticky="w")
# Ana dropdown oluşturma
dropdown_var = tk.StringVar()
dropdown = ttk.Combobox(top_frame, textvariable=dropdown_var,width=5, values=[1, 2, 3, 4, 5, 6, 7])
dropdown.grid(row=0, column=1, pady=1,sticky="w")
dropdown.bind("<<ComboboxSelected>>", on_dropdown_change)

结果:

enter image description here

Python相关问答推荐

对整个 pyramid 进行分组与对 pyramid 列子集进行分组

为什么默认情况下所有Python类都是可调用的?

PyQt5,如何使每个对象的 colored颜色 不同?'

有没有一种方法可以从python的pussompy比较结果中提取文本?

从spaCy的句子中提取日期

导入...从...混乱

如何在UserSerializer中添加显式字段?

转换为浮点,pandas字符串列,混合千和十进制分隔符

try 检索blob名称列表时出现错误填充错误""

未调用自定义JSON编码器

导入错误:无法导入名称';操作';

Gekko中基于时间的间隔约束

使用Python异步地持久跟踪用户输入

如何反转一个框架中列的值?

获取git修订版中每个文件的最后修改时间的最有效方法是什么?

Django在一个不是ForeignKey的字段上加入'

SpaCy:Regex模式在基于规则的匹配器中不起作用

在round函数中使用列值

Matplotlib中的曲线箭头样式

多索引数据帧到标准索引DF