在Python中从Entry()获取值

时间:2019-01-12 00:49:11

标签: python user-interface tkinter

为我的Python程序创建GUI时遇到了一些问题。

在代码中,我实现了此功能:

def simula_partita(modello, squadraCasa, squadraOspite, max_gol=10):
    media_gol_casa = modello.predict(pd.DataFrame(data={'Squadra': squadraCasa,
                                                    'Avversaria': squadraOspite, 'Casa':1},
                                                    index=[1])).values[0]
    media_gol_ospiti = modello.predict(pd.DataFrame(data={'Squadra': squadraOspite,
                                                    'Avversaria': squadraCasa, 'Casa':0},
                                                    index=[1])).values[0]
    previsione_squadra = [[poisson.pmf(i, media_squadra) for i in range(0, max_gol+1)] 
    for media_squadra in [media_gol_casa, media_gol_ospiti]]

    ris = np.outer(np.array(previsione_squadra[0]), np.array(previsione_squadra[1]))
    print(ris)
    return(ris)

它需要四个参数(modello,squadraCasa,squadraOspite,max_gol)。

如果我在代码中调用它,就像这样:

simula_partita(modello_poisson, 'Juventus', 'Liverpool', max_gol=4)

运行顺利,并给了我令人讨厌的输出。

现在,在代码末尾,我尝试使用此代码制作GUI:

    root = Tk()

m = StringVar()
c = StringVar()
o = StringVar()
g = StringVar()

sceltaModello = Entry(root, textvariable = m)
sceltaCasa = Entry(root, textvariable = c)
sceltaOspite = Entry(root, textvariable = o)
sceltaGol = Entry(root, textvariable = g)

sceltaModello.pack()
sceltaCasa.pack()
sceltaOspite.pack()
sceltaGol.pack()

m.set('modello_poisson')
c.set('Squadra di Casa')
o.set('Squadra Ospite')
g.set('Max Gol')

modello = m.get()
squadraCasa = c.get()
squadraOspite = o.get()
max_gol = g.get()

avvia = Button(root, text = "Avvia Simulazione", command = simula_partita)

avvia.pack()
root.mainloop()

我的愿望是将“ modello”,“ squadraCasa”,“ squadraOspite”和“ max_gol”作为Entry()输入,但是它似乎不起作用,并且给了我函数“ simula_partita”错误需要这些参数。

您能帮我解决这个问题吗? 提前非常感谢!

2 个答案:

答案 0 :(得分:0)

您的功能由4个参数定义。通过Button中的命令选项调用函数时,必须传递这些参数。我不完全知道您的功能是什么,因此,我现在将其替换以打印4个参数。

from tkinter import *
import sqlite3
root = Tk()
def simula_partita(modello, squadraCasa, squadraOspite, max_gol=10):
    print(modello, squadraCasa, squadraOspite, max_gol)

m = StringVar()
c = StringVar()
o = StringVar()
g = StringVar()

sceltaModello = Entry(root, textvariable = m)
sceltaCasa = Entry(root, textvariable = c)
sceltaOspite = Entry(root, textvariable = o)
sceltaGol = Entry(root, textvariable = g)

sceltaModello.pack()
sceltaCasa.pack()
sceltaOspite.pack()
sceltaGol.pack()

m.set('modello_poisson')
c.set('Squadra di Casa')
o.set('Squadra Ospite')
g.set('Max Gol')

avvia = Button(root, text = "Avvia Simulazione", command = lambda: simula_partita(m.get(), c.get(), o.get(), g.get()))
avvia.pack()
root.mainloop()

编辑:回答OP的特定问题

输入字段必须设置为字符串。我了解您正在尝试将变量作为参数传递。但是输入字段的输出将是一个字符串。

您可以做的是创建一个字典,将字符串作为键,并将变量作为值(即下面的代码中的“数据”),然后发送变量,如data[m.get()]。如果您可以提供更多的变量,则可以将其添加为该字典中的另一个键值对。

第4个参数也是一个int,因此在使用int()传递之前,我已经将它设为一个int。

尝试在完整代码中更改为这些行。

m.set('modello_poisson')
c.set('Squadra di Casa')
o.set('Squadra Ospite')
g.set('Max Gol')
data={'modello_poisson':modello_poisson}
avvia = Button(root, text = "Avvia Simulazione", command = lambda: simula_partita(data[m.get()], c.get(), o.get(), int(g.get())))

我在4个输入字段中输入了以下内容

modello_poisson 
Juventus
Atalanta
4

并获得输出

[[0.03608837 0.03099437 0.0133097  0.00381033 0.00081812]
 [0.08888343 0.07633721 0.03278097 0.00938461 0.00201498]
 [0.1094572  0.09400692 0.04036875 0.01155685 0.00248139]
 [0.0898621  0.07717774 0.03314191 0.00948794 0.00203717]
 [0.0553312  0.047521   0.02040662 0.00584205 0.00125436]]

打印到我的控制台上。

答案 1 :(得分:-1)

完整代码:

for question in a_dict:
    answer = input(question.question)
    if answer == question.answer:
        points += 10