Python tkinter条目小部件

时间:2015-12-02 18:20:19

标签: python tkinter

我无法通过Vfrat,V_base,floss和constloss的值填充条目小部件。 一旦程序执行,任何人都可以让我知道如何填充值。

import math
import matplotlib.pyplot as plt
import numpy as np
from decimal import Decimal
import sys
from Tkinter import *

def v_f_calculation():
    v_line = 28.0
    f_base = 100.0
    f_top = 200.0
    f_step = input('Enter the no of step of frequency')
    V_frat =  v_line/f_base
    print 'vfrat is ', V_frat
    freq = np.arange( f_base/f_step, f_top+(f_base/f_step), f_base/f_step)
    print 'frequency is ', freq
    print('length of freq = ',len(freq))
    V_base = np.arange(f_base/f_step*V_frat, f_base*V_frat,  f_base/f_step*V_frat)
    print 'V_base is ', V_base 
    V_top = np.ones(len(freq)-len(V_base))*v_line
    print 'V_top is = ', V_top
    V_v_f = np.concatenate((V_base, V_top), axis = 0)
    print 'V_v_f is = ',V_v_f
    print 'length of V_V_F', len(V_v_f)
    plt.figure(1)
    plt.plot(freq, V_v_f, 'ro-')
    plt.show()  
    return V_frat, V_base, V_top, V_v_f


def get_fric_windage_loss ():

    st_cr_lg = 120.0
    f_base = 100.0
    lg = 0.5
    tot_iron_loss = 500.0
    rt_od = 100.0

    fric_loss = ((rt_od*10**(-3))*(st_cr_lg*(10**(-3)))*f_base**0.38)/(lg/1000)
    cons_loss = fric_loss + tot_iron_loss
    print 'friction loss is =  ', fric_loss
    print 'constant loss is = ', cons_loss
    return fric_loss, cons_loss

def print_out(vf, floss):

    mgui = Tk()
    text = StringVar()
    wer = IntVar()
    mgui.geometry ('1200x1200')
    mgui.title('Output Sheet')

    mlabel1 = Label(text='Vfrat', fg='black', bg = 'white').place(x=210, y=20)
    mentry1 = Entry(textvariable = vf[0], width = 5).place(x=210, y =45 )

    mlabel2 = Label(text='V_base', fg='black', bg = 'white').place(x=270, y=20)
    mentry2 = Entry(textvariable = vf[1], width = 5).place(x=270, y =45 )


    mlabel3 = Label(text='floss', fg='black', bg = 'white').place(x=270, y=20)
    mentry3 = Entry(textvariable = floss[0], width = 5).place(x=270, y =45 )


    mlabel4 = Label(text='const_loss', fg='black', bg = 'white').place(x=270, y=20)
    mentry4 = Entry(textvariable = floss[1], width = 5).place(x=270, y =45 )
    return
mainloop()
if __name__ == '__main__':
    vf = v_f_calculation()
    floss = get_fric_windage_loss()

我无法通过Vfrat,V_base,floss和constloss的值填充条目小部件。 一旦程序执行,任何人都可以让我知道如何填充值。

2 个答案:

答案 0 :(得分:0)

条目小部件通常用于接受用户输入。这就是'textvariable'参数的用途。您需要将其设置为tkinter变量(例如StringVar),然后该变量将保留条目小部件框中的值。在您的情况下,只需使用'set'方法设置变量的默认值。

这是一个更新print_out函数,显示如何执行此操作。您可以稍后将变量类型从StringVar更改为更适合您的数据的变量。注意我还将mainloop()移动到此函数中并更改了一些重叠小部件的x值。

def print_out(vf, floss):
    mgui = Tk()  
    text = StringVar()
    var_vfrat = StringVar()
    var_vbase = StringVar()
    var_floss = StringVar()
    var_const_loss = StringVar()
    wer = IntVar()

    var_vfrat.set(vf[0])
    var_vbase.set(vf[1])
    var_floss.set(floss[0])
    var_const_loss.set(floss[1])

    mgui.geometry('1200x1200')
    mgui.title('Output Sheet')

    mlabel1 = Label(text='Vfrat', fg='black', bg='white').place(x=210, y=20)
    mentry1 = Entry(textvariable=var_vfrat, width=5).place(x=210, y=45)

    mlabel2 = Label(text='V_base', fg='black', bg='white').place(x=270, y=20)
    mentry2 = Entry(textvariable=var_vbase, width=5).place(x=270, y=45)

    mlabel3 = Label(text='floss', fg='black', bg='white').place(x=330, y=20)
    mentry3 = Entry(textvariable=var_floss, width=5).place(x=330, y=45)

    mlabel4 = Label(text='const_loss', fg='black', bg='white').place(x=390, y=20)
    mentry4 = Entry(textvariable=var_const_loss, width=5).place(x=390, y=45) 
    mgui.mainloop()
    return

获取值后,不要忘记调用此print_out函数,编码后的图形仅在显示和关闭图形后显示tkinter窗口。

if __name__ == '__main__':

    vf = v_f_calculation()
    floss = get_fric_windage_loss()
    print_out(vf, floss)

这是一个开始。对于完整的GUI应用程序,您可以使用另一个条目小部件来获取用户的频率步骤,然后添加一个按钮来调用这两个函数。

答案 1 :(得分:0)

如果要将值插入Entry小部件,则必须具有对小部件的引用,并且可以调用insert方法。

要获得正确的参考,您不得在致电place的同一行拨打Button。像这样定义你的按钮:

mentry1 = Entry(textvariable=var_vfrat, width=5)
...
mentry1.place(x=210, y=45)

稍后,您可以使用insert方法在窗口小部件中插入内容:

mentry1.insert(0, Vfrat)