【问题标题】:Python - Tkinter - i want get() value from Entry to use in functionPython - Tkinter - 我希望 Entry 中的 get() 值在函数中使用
【发布时间】:2013-01-18 20:18:53
【问题描述】:

我无法从“Entry”中检索变量,然后将变量输入到函数中。例如,我想检索作为变量“条目”的“NbF”。我在“set”中做了,我可以用“get”检索它,但是当我得到一个新的文本“entry”时,我没有得到新的值。

这是我的代码:

#!/usr/local/bin/python
# -*- coding:utf-8 -*-
from Tkinter import *
import tkFileDialog, tkMessageBox

application = Tk()
application.title("Application Drone - Analyse Vidéo")


def getFile(): 
        varName = tkFileDialog.askopenfilename().encode('utf-8')
        Name.set('Path : ' + varName)

def convert(nbFrame):
    print 'ffmpeg -i pathVideo -r '+nbFrame+' -f image2 "temp%4d.png"' 

def detect():
    pass

def analyse():
    pass

frame1 = Frame(application, bg="blue",   width=560, height=100)
frame1.pack(side=TOP, fill=X)

frame2 = Frame(application, bg="red",   width=560, height=100)
frame2.pack(side=TOP, fill=X)

frame3 = Frame(application, bg="green",   width=560, height=100)
frame3.pack(side=TOP, fill=X)

frame4 = Frame(application, bg="yellow",   width=560, height=100)
frame4.pack(side=TOP, fill=X)

frame5 = Frame(application, bg="grey",    width=560, height=100)
frame5.pack(side=BOTTOM, fill=BOTH, expand=1)

#frame 1
Name=StringVar()
lab1 = Label(frame1, text="Step 1 : Recup video").grid(row=0,column=0)
butt1 = Button(frame1,text="browse",command=getFile).grid(row=0,column=1)
nameVideo = Label(frame1, textvariable=Name).grid(row=1,column=0)

#frame 2
NbF = StringVar()
NbPictures=StringVar()
lab2 = Label(frame2, text="Step 2 : Convert video to images").grid(row=0,column=0)
ent2 = Entry(frame2, textvariable=NbF).grid(row=0,column=1)
# ent2.pack()
NbF.set('nb frame')
recup2 = NbF.get()
butt2 = Button(frame2,text="convert",command=lambda :convert(recup2)).grid(row=0,column=2)
nbP = Label(frame2, textvariable=NbPictures).grid(row=1,column=0)

#frame 3
NbS=StringVar()
lab3 = Label(frame3, text="Step 3 : Detect shape").grid(row=0,column=0)
butt3 = Button(frame3,text="detect",command=lambda :detect).grid(row=0,column=1)
numberShape = Label(frame3, textvariable=NbS).grid(row=1,column=0)

#frame 4
NbC=StringVar()
lab4 = Label(frame4, text="Step 4 : Analyse QrCode").grid(row=0,column=0)
butt4 = Button(frame4,text="analyse",command=lambda :analyse).grid(row=0,column=1)
numberCoord = Label(frame4, textvariable=NbC).grid(row=1,column=0)

#frame 5
lab5 = Label(frame5, text="Step 5 : Send coordonates").grid(row=0,column=0)
butt5 = Button(frame5,text="send",command=lambda :send).grid(row=0,column=1)

application.mainloop()

【问题讨论】:

  • 我很难理解这里的问题所在。不过,有些事情可能会导致问题——.grid 方法总是返回None。在你的代码中,当我怀疑你期望的时候,你将 None 分配给了很多变量。

标签: python tkinter get var tkinter-entry


【解决方案1】:

也许你的意思是:

butt2 = Button(frame2,text="convert",command=lambda :convert(NbF.get())).grid(row=0,column=2)

这会延迟调用NbF.get(),直到实际按下按钮。与之前的代码一样,您在创建按钮之前调用NbF.get(),然后在您按下按钮时将该值传递给函数。


附带说明,上述代码中的butt2 将始终为None,这几乎肯定不是您想要的。这是因为Widget.grid 总是返回None。我建议您不要在同一行创建小部件并将其打包/网格化——始终将其分成两行:

butt2 = Button(frame2,text="convert",command=lambda :convert(NbF.get()))
butt2.grid(row=0,column=2)

【讨论】:

  • 非常感谢。它完美地工作。我将更改我所有的 Widget.grid
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 1970-01-01
  • 1970-01-01
  • 2020-04-15
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多