【问题标题】:Problems displaying input data into a textbox using tkinter,python使用 tkinter、python 将输入数据显示到文本框中时出现问题
【发布时间】:2015-11-05 21:25:15
【问题描述】:

我正在尝试创建一个程序,您可以将数据直接输入到 tkinter 界面,然后在文本框中显示数据。但是,我收到以下错误

line 2122, in __init__
(widgetName, self._w) + extra + self._options(cnf))
_tkinter.TclError: unknown option "-textvariable"

from tkinter import *
from tkinter import ttk

def textMethod(*args):
    copytext = textinput1.get()
    textoutput1.set(copytext)

root = Tk()

root.title("Naynt Music Database")
frame = ttk.Frame(root,padding = "12 12 12 12")
frame.grid(column=0,row=1,sticky="N,S,E,W")
frame.columnconfigure(0,weight=1)
frame.rowconfigure(0,weight=1)

textinput1 = StringVar()
textoutput1 = StringVar()

text_entry = ttk.Entry(frame,width=20,textvariable = textinput1)
text_entry.grid(row=1,column=0,sticky=(W,E))
ttk.Button(frame,text="Add songname",command=textMethod).grid(column=1,row=1)

songListFrame = Frame(frame, bd=2, relief=SUNKEN)

frame.grid_rowconfigure(0, weight=1)
frame.grid_columnconfigure(0, weight=1)

xscrollbar = Scrollbar(frame, orient=HORIZONTAL)
xscrollbar.grid(row=3, column=0, sticky=E+W)

yscrollbar = Scrollbar(frame)
yscrollbar.grid(row=2, column=1, sticky=N+S)

songList = Text(frame, wrap=NONE, bd=0,
            xscrollcommand=xscrollbar.set,
            yscrollcommand=yscrollbar.set,
            textvariable=textoutput1)

songList.grid(row=2, column=0, sticky=N+S+E+W)

xscrollbar.config(command=songList.xview)
yscrollbar.config(command=songList.yview)

frame.pack()


root.mainloop()

【问题讨论】:

    标签: python input tkinter interface tkinter-entry


    【解决方案1】:

    问题的出现是因为线条 -

    songList = Text(frame, wrap=NONE, bd=0,
            xscrollcommand=xscrollbar.set,
            yscrollcommand=yscrollbar.set,
            textvariable=textoutput1)
    

    您不能为Text 小部件设置textvariable

    您应该使用Text.insert() 方法和END 将您的歌曲插入到Text 小部件的末尾。示例 -

    from tkinter import *
    from tkinter import ttk
    
    def textMethod(*args):
        copytext = textinput1.get()
        songList.insert(END, copytext + '\n')
    
    root = Tk()
    
    root.title("Naynt Music Database")
    frame = ttk.Frame(root,padding = "12 12 12 12")
    frame.grid(column=0,row=1,sticky="N,S,E,W")
    frame.columnconfigure(0,weight=1)
    frame.rowconfigure(0,weight=1)
    
    textinput1 = StringVar()
    textoutput1 = StringVar()
    
    text_entry = ttk.Entry(frame,width=20,textvariable = textinput1)
    text_entry.grid(row=1,column=0,sticky=(W,E))
    ttk.Button(frame,text="Add songname",command=textMethod).grid(column=1,row=1)
    
    songListFrame = Frame(frame, bd=2, relief=SUNKEN)
    
    frame.grid_rowconfigure(0, weight=1)
    frame.grid_columnconfigure(0, weight=1)
    
    xscrollbar = Scrollbar(frame, orient=HORIZONTAL)
    xscrollbar.grid(row=3, column=0, sticky=E+W)
    
    yscrollbar = Scrollbar(frame)
    yscrollbar.grid(row=2, column=1, sticky=N+S)
    
    songList = Text(frame, wrap=NONE, bd=0,
                xscrollcommand=xscrollbar.set,
                yscrollcommand=yscrollbar.set)
    
    songList.grid(row=2, column=0, sticky=N+S+E+W)
    
    xscrollbar.config(command=songList.xview)
    yscrollbar.config(command=songList.yview)
    
    frame.pack()
    
    
    root.mainloop()
    

    还添加了换行符,以便每首歌曲都换行。

    【讨论】:

    • 非常感谢,非常有帮助!
    • 如果答案对您有帮助,我建议您接受答案(通过单击答案左侧的勾号),这将对社区有所帮助。
    【解决方案2】:

    文本小部件不使用文本变量。要从小部件中读取文本,请使用它的 get() 方法。我推荐 John Shipman 在 infohost.nmt.edu/tcc/help/pubs/tkinter/web/index.html 上对 tkinter 的介绍

    【讨论】: