python - Tkinter get() 函数不将值保存为 float 或 int 变量

标签 python tkinter

我正在编写一个脚本,允许我使用将用于设置函数生成器的 tkinter 条目小部件输入值。

每当我尝试使用 tkinter 而不仅仅是 python input() 函数时,它都会给我这个错误:

lowf = int(float(inputlowf) * 10)
ValueError: could not convert string to float: 

这是我得到的:(使用 pywin32 来控制函数发生器)

import win32api, win32con
import time
import win32com.client
import tkinter

def click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

shell = win32com.client.Dispatch("WScript.Shell")

master = tkinter.Tk()
tkinter.Label(master, text="Starting Frequency").grid(row=0)
tkinter.Label(master, text="Ending Frequency").grid(row=1)
tkinter.Label(master, text="Increment").grid(row=2)

line1 = tkinter.Entry(master)
line2 = tkinter.Entry(master)
line3 = tkinter.Entry(master)

line1.grid(row=0, column=1)
line2.grid(row=1, column=1)
line3.grid(row=2, column=1)

inputlowf = line1.get()
inputhighf = line2.get()
inputstep = line3.get()

tkinter.Button(master, text='OK', command=master.destroy).grid(row=3, column=1, sticky=tkinter.W, pady=4)

tkinter.mainloop()

lowf = int(float(inputlowf) * 10)
highf = int(float(inputhighf) * 10)
step = int(float(inputstep) * 10)

for z in range(lowf,(highf + step),step):

        file = z

        freq = z / 10

        print(freq)

        time.sleep(.5)

最佳答案

inputlowf = line1.get()
inputhighf = line2.get()
inputstep = line3.get()

这 3 行在您运行脚本时立即执行,因此 inputlowfinputhighffinputstep 变量包含空输入字段当您初始化 Entry 小部件时,它就在那里。尝试制作一个回调函数,只要您单击“确定”即可获取值,该回调函数就会运行。

试试看我的意思:

import win32api, win32con
import time
import win32com.client
import Tkinter

def click(x,y):
    win32api.SetCursorPos((x,y))
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN,x,y,0,0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP,x,y,0,0)

shell = win32com.client.Dispatch("WScript.Shell")

master = Tkinter.Tk()
Tkinter.Label(master, text="Starting Frequency").grid(row=0)
Tkinter.Label(master, text="Ending Frequency").grid(row=1)
Tkinter.Label(master, text="Increment").grid(row=2)

line1 = Tkinter.Entry(master)
line2 = Tkinter.Entry(master)
line3 = Tkinter.Entry(master)

line1.grid(row=0, column=1)
line2.grid(row=1, column=1)
line3.grid(row=2, column=1)

def callback():

    global line1, line2, line3, master, lowf, highf, step
    inputlowf = line1.get()
    inputhighf = line2.get()
    inputstep = line3.get()

    try:

        lowf = int(float(inputlowf) * 10)
        highf = int(float(inputhighf) * 10)
        step = int(float(inputstep) * 10)

        print lowf
        print highf
        print step

        master.destroy()

    except ValueError:

        print "Error with input"

myButton = Tkinter.Button(master, text='OK', command=callback).grid(row=3, column=1, sticky=Tkinter.W, pady=4)

Tkinter.mainloop()

关于python - Tkinter get() 函数不将值保存为 float 或 int 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31034242/

相关文章:

python - Dronekit-python 在 docker 中运行,连接到主机上的 MAVProxy

python - matplotlib 中的阴影图例线

python - 映射到 numpy 数组,为什么要花费更多时间?

python - 非连续线用户绘制tkinter python

Python:Tkinter 接受的位图和图标

python - 如何在 Tkinter 中调整根窗口的大小?

python - 如何创建自定义模型类

python - 从 Pandas 的timedelta列中提取天数

python - 如何扩展ttk笔记本标签或标签按钮以填充窗口

python - 如何让 for 循环生成的 TO 按钮将输入传递给其命令? (Python)