如何使用Tkinter在多行字符串中分配和调用多个变量

时间:2016-06-17 16:02:21

标签: python tkinter

我正在学习编码,只是从python开始。我构建了我的第一个“on my own”应用程序,我打算在发送DHCP请求时自动执行某些打字工作。我在调用我已设置为多行字符串中的变量的多个条目时遇到问题。我尝试在entry()中使用StringVar()和textvariable。任何意见,将不胜感激。我认为问题在于str1变量,但我缺乏经验和理解让我感到难过。结果返回变量PY_VAR0,这意味着我有一些搞砸了,程序不知道在哪里看(我认为)。

from Tkinter import *

win = Tk()

win.minsize(width=300, height=200)
win.maxsize(width=650, height=500)

#Definitions
def dhcp():
    print str1
lab1 = Label(win, text="PC Name: ")
lab2 = Label(win,text="MAC Address: ")
lab3 = Label(win, text="IP Address")
but1 = Button(win, text="DHCP", command=dhcp)
but2 = Button(win, text="NODE")
but3 = Button(win, text="BOTH")
pc_name = StringVar()
entry1 = Entry(win, textvariable=pc_name)
mac_add = StringVar()
entry2 = Entry(win, textvariable=mac_add)
ip_add = StringVar()
entry3 = Entry(win, textvariable=ip_add)


str1= """host %s
                {
                       hardware ethernet %s ;
                       fixed-address %s ;
                       option host-name %s ;
                }"""%(pc_name, mac_add, ip_add, pc_name)

#Layout and Framing

lab1.grid(row=0)
lab2.grid(row=1)
lab3.grid(row=2)
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)
entry3.grid(row=2, column=1)
but1.grid(row=3, column=0)
but2.grid(row=4, column=0)
but3.grid(row=5, column=0)

win.mainloop()

1 个答案:

答案 0 :(得分:0)

您的代码中有两个主要问题:

  • StringVar的用法
  • 构建str1的时间

正如Tadhg McDonald-Jensen在他的推荐中所提到的,Tkinter.StringVar正在通过其get() - 方法访问。所以你的字符串构建应该如下所示:


str1= """host %s
         {
             hardware ethernet %s ;
             fixed-address %s ;
             option host-name %s ;
         }"""%(pc_name.get(), mac_add.get(), ip_add.get(), pc_name.get())

此分配应在dhcp回调中完成。为什么?因为当用户按下按钮时,您想要读取数据,而不是在创建元素时。


#Definitions
def dhcp():
    str1= """host %s
             {
                 hardware ethernet %s ;
                 fixed-address %s ;
                 option host-name %s ;
             }"""%(pc_name.get(), mac_add.get(), ip_add.get(), pc_name.get())
    print str1