2016-08-10 196 views
0

我在python 3.4中使用Tkinter来创建一个基于文本的游戏,我无法弄清楚如何从Entry小部件获取字符串,它只是返回Py_Var#,#是一个数字。我已经看过类似问题的答案,但他们中没有一个与我所需要的和所拥有的完全一致。这是相关的代码段:Python Tkinter StringVar只显示Py_Var(数字)

from tkinter import * 

win = Tk() 
win.geometry("787x600") 

playername = StringVar() 

def SubmitName(): 
    playername.get 
    #messagebox.showinfo("Success", playername) 
    print(playername) 

frame3 = Frame(win) 
frame3.pack() 
label1 = Label(frame3, text="You awaken in a room, with no memories of yourself or your past. ") 

label2 = Label(frame3, text="First, how about you give yourself a name:") 

label1.config(font=("Courier", 11)) 
label2.config(font=("Courier", 11)) 

entry1 = Entry(frame3, textvariable=playername) 
entry1.config(font=("Courier", 11)) 

label1.grid(row=0, column=0, columnspan=3) 
label2.grid(row=1, column=0) 

entry1.grid(row=1, column=1) 

bnamesub= Button(frame3, text="Submit", command=lambda: SubmitName()) 
bnamesub.grid() 

win.mainloop() 

此外,第一次使用stackoverflow和它的阅读奇怪,但瓦特/ e。

回答

0
from tkinter import * 
import pickle 

win = Tk() 
win.geometry("787x600") 

def SubmitName(): 
     playername = entry1.get() 
     messagebox.showinfo("Success", playername) 
     print(playername) 

frame3 = Frame(win) 
frame3.grid() 
label1 = Label(frame3, text="You awaken in a room, with no memories of yourself or your past. ") 

label2 = Label(frame3, text="First, how about you give yourself a name:") 

label1.config(font=("Courier", 11)) 
label2.config(font=("Courier", 11)) 

#name entered is a StringVar, returns as Py_Var7, but I need it to return the name typed into entry1. 
entry1 = Entry(frame3) 
entry1.config(font=("Courier", 11)) 

label1.grid(row=0, column=0, columnspan=3) 
label2.grid(row=1, column=0) 

entry1.grid(row=1, column=1) 

bnamesub= Button(frame3, text="Submit", command=lambda: SubmitName()) 
bnamesub.grid() 

我改变了:
-deleted playername = StringVar()。我们并不需要它;
-在功能内部更改:将playername.get更改为playername = entry1.get();
-added frame3.grid()(没有几何管理,小部件无法显示在屏幕上。
- 另外,稍微编辑一下:在Python中,注释用#符号创建。所以我将*更改为#

+0

呜呼!谢谢Parviz,知道了。在我遇到的每个地方,都有着与众不同的答案,这与众不同,非常感谢。 –

+0

不客气! –

2

你在SubmitName()有两个错误。

首先,你需要获取文本是这样的:

txt = playername.get() 

然后,你需要打印txt

print(txt) 

搞错了,你打印的StringVar变量本身。