【问题标题】:Tkinter and ttk python2.7tkinter 和 ttk python2.7
【发布时间】:2012-10-17 20:58:17
【问题描述】:

我在网上找到了这段代码,我想尝试一下,因为我试图弄清楚如何在我在消息框中输入内容时更改我的标签。我尝试了getmethod,但我一直在努力使用它。所以我找到了这段代码,当我尝试它时,我得到了 ttk 未定义的错误,但它显然是。

from Tkinter import *
from ttk import *

def calculate(*args):
    try:
        value = float(feet.get())
        meters.set((0.3048 * value * 10000.0 + 0.5)/10000.0)
    except ValueError:
        pass

root = Tk()
root.title("Feet to Meters")

mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)

feet = StringVar()
meters = StringVar()

feet_entry = ttkEntry(mainframe, width=7, textvariable=feet)
feet_entry.grid(column=2, row=1, sticky=(W, E))

ttk.Label(mainframe, textvariable=meters).grid(column=2, row=2, sticky=(W, E))
ttk.Button(mainframe, text="Calculate", command=calculate).grid(column=3, row=3, sticky=W)

ttk.Label(mainframe, text="feet").grid(column=3, row=1, sticky=W)
ttk.Label(mainframe, text="is equivalent to").grid(column=1, row=2, sticky=E)
ttk.Label(mainframe, text="meters").grid(column=3, row=2, sticky=W)

for child in mainframe.winfo_children(): child.grid_configure(padx=5, pady=5)

feet_entry.focus()
root.bind('<Return>', calculate)

root.mainloop()

Traceback(最近一次调用最后一次): 文件“tk8.py”,第 15 行,在 mainframe = ttk.Frame(root, padding="3 3 12 12") NameError: 名称 'ttk' 未定义

【问题讨论】:

    标签: python tkinter tk ttk


    【解决方案1】:

    所以我找到了这段代码,当我尝试它时,我得到了 ttk 的错误 未定义,但显然是。

    不过,您正在使用from ttk import * 对模块 进行星型导入,因此名称ttk 不涉及任何内容。例如,from math import * 会将sincos 等全部带入您的命名空间,但名称math 仍然未定义。如果我将导入切换到

    ,该代码对我有用
    from Tkinter import *
    import ttk
    

    并在此行中从ttk.Entry 添加缺少的.

    feet_entry = ttk.Entry(mainframe, width=7, textvariable=feet)
    

    【讨论】:

    • 好的,谢谢。唯一的问题是代码没有达到我的预期。你知道如何用你的消息框改变你的标签吗?所以我输入的每个数字都会自动转换,无需按下按钮?
    【解决方案2】:

    您正在寻找trace_variable 方法。这是一个固定版本:

    from Tkinter import Tk, StringVar
    import ttk
    
    def calculate(*args):
        try:
            value = float(feet.get())
            meters.set('%g' % (0.3048 * value))
        except ValueError:
            if not feet.get():
                meters.set('')
    
    root = Tk()
    root.title("Feet to Meters")
    
    feet = StringVar()
    feet.trace_variable('w', calculate)
    meters = StringVar()
    
    main = ttk.Frame(root)
    main.grid(sticky='nsew')
    
    ttk.Label(main, text="Feet:").grid(row=0, sticky='e')
    feet_entry = ttk.Entry(main, width=7, textvariable=feet)
    feet_entry.grid(row=0, column=1, sticky='ew')
    feet_entry.focus()
    
    ttk.Label(main, text="Meters:").grid(row=1, sticky='e')
    ttk.Label(main, textvariable=meters).grid(row=1, column=1, sticky='ew')
    
    root.mainloop()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-28
      • 2011-08-27
      • 2020-08-05
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      相关资源
      最近更新 更多