代码之家  ›  专栏  ›  技术社区  ›  kakyo

tkinter-旋转框看起来比预期的长

  •  1
  • kakyo  · 技术社区  · 7 年前

    运行python3.7从python.org下载到macos mojave。

    我用下面的代码来排列 Spinbox 和A Scale 控制同一个变量。但是,我并不期望这样的外观:

    import tkinter as tk
    
    root = tk.Tk()
    mainframe = tk.Frame(root)
    
    # Model
    
    input = tk.DoubleVar(value=0.)
    # input = tk.IntVar(value=0)
    spin = tk.Spinbox(mainframe, textvariable=input, wrap=True)
    slide = tk.Scale(mainframe, variable=input, orient='horizontal')
    spin['to'] = 1.0
    spin['from'] = 0.0
    spin['increment'] = 0.01
    slide['to'] = 1.0
    slide['from'] = 0.0
    
    # spin['to'] = 100
    # spin['from'] = 0
    # spin['increment'] = 1
    # slide['to'] = 100
    # slide['from'] = 0
    
    # Layout
    
    weights = {'spin': 1, 'slide': 1000}
    
    mainframe.grid_rowconfigure(0, weight=1)
    mainframe.grid_columnconfigure(0, weight=weights['spin'])
    mainframe.grid_columnconfigure(1, weight=weights['slide'])
    spin.grid(row=0, column=0, sticky='news')
    slide.grid(row=0, column=1, sticky='news')
    
    root.grid_rowconfigure(0, weight=1)
    root.grid_columnconfigure(0, weight=1)
    mainframe.grid(row=0, column=0)
    
    root.mainloop()
    

    我希望 规模 会占用比 纺丝箱 但结果却恰恰相反。

    Result

    我想可能是因为我用了 DoubleVar 因为十进制问题,字符串可能变长,但是 IntVar 给了我同样的结果。查看注释掉的代码块。

    怎么了?我该怎么做 纺丝箱 还有一个很长的 规模 摆脱这种情况?这个MacOS是特定的吗,在这里操作系统在小部件上施加一些最小尺寸?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Miraj50 user2991863    7 年前

    一些tkinter小部件的某些属性具有默认值。

    Spinbox 默认宽度为 20 字符单位 ,除非另有规定。

    Scale 默认长度为 100 像素 ,除非另有规定。

    所以这就是为什么你得到 纺丝箱 太大了, 规模 相对较小。

    要修复它,您可以自己指定它们,如下所示:

    spin = tk.Spinbox(mainframe, textvariable=input, wrap=True, width=1)
    slide = tk.Scale(mainframe, variable=input, orient='horizontal', length=200)

    Result

        2
  •  2
  •   Heyran.rs    7 年前

    可以设置旋转框的宽度。例如:

    spin = tk.Spinbox(mainframe, textvariable=input, wrap=True, width=5)