首页 > 解决方案 > Tkinter Text 小部件返回“.!frame3.!frame3.!frame.!text”而不是适当的值

问题描述

我目前正在开展一个项目,您可以在其中扫描条形码并将结果实现到 excel 文件中。我正在使用 tkinter 制作我的 GUI,但是,当我尝试从文本小部件获取值时,它返回值“.!frame3.!frame3.!frame.!text”。我该如何解决这个问题以获得适当的值?

到目前为止,这是我的代码

import tkinter as tk 
from tkinter import *
root = tk.Tk(className = "Tool Manager")
root.configure(bg='#C4C4C4')
root.title('Main Screen')
root.geometry("800x600")




main = Frame(root, bg='#C4C4C4', width = 800, height = 600)
#This is the contents of the Main Frame (screen 1)
frame_pad1 = Frame(main, bg='#C4C4C4')
frame_1 = Frame(main,bg='#C4C4C4')
frame_2 = Frame(main, bg='#C4C4C4')
frame_3 = Frame(main, bg='#C4C4C4')
min = Frame(root, bg = 'GREEN')

#mout stuffs
mout = Frame(root, bg = '#C4C4C4')
outframe_pad1 = Frame(mout, bg='#C4C4C4')
outframe_1 = Frame(mout, bg='#C4C4C4')
outframe_2  = Frame(mout, bg='#C4C4C4')
outframe_3  = Frame(mout, bg='#C4C4C4')




#code for changing screens
def raise_frame(frame):
    frame.tkraise()
for frame in (main, min, mout):
    frame.grid(row=1, column=1, sticky='news')
#sets frame weight for 3 rows (centers frames)
rows = 0
while rows < 3:
    root.rowconfigure(rows, weight=1)
    root.columnconfigure(rows,weight=1)
    rows += 1

def commit_to_file():
    ID = name.get()
    out_list.get('1.0', 'end-1c')
    print(out_list) #<----- THIS IS WHERE I'M RETURNING VALUES TO THE TERMINAL


def on_every_keyboard_input(event):
    update_char_length(out_list)

   #updating Line Length Information
def update_char_length(out_list):
    string_in_text = out_list.get('1.0', '1.0 lineend')
    string_length = len(string_in_text)
    print(string_length)
    if (string_length == 4):
        out_list.insert(0.0, '\n')
        out_list.mark_set("insert", "%d.%d" % (0,0))

#main screen formatting
area = PhotoImage(file="test.png")
areaLabel = Label(frame_1, image=area, bg='#C4C4C4')
areaLabel.pack(side=RIGHT)

mwLabel = Label(frame_2,text="this is only a test", font=("Airel", 20), bg='#C4C4C4')
mwLabel.pack(side=RIGHT)

out_button = Button(frame_3, text="Check Out", command=lambda:raise_frame(mout) , height=5, width=20, font=("Airel", 15))
out_button.pack(side=RIGHT, padx=20, pady = 4)
in_button = Button(frame_3, text="Check In", command=lambda:raise_frame(min), height=5, width=20, font=("Airel", 15))
in_button.pack(side=LEFT, padx=20, pady = 4)


#out screen formatting
name = Entry(outframe_1, font=("Airel", 15))
name.pack(side=RIGHT)
name_lbl = Label(outframe_1, text="ID Number", bg='#C4C4C4', font=("Airel", 15))
name_lbl.pack(side=LEFT)
outlist  = Frame(outframe_2, bd=1, relief=SUNKEN)
outlist.pack(side=LEFT)
out_list = Text(outlist, height=30, width=40)
out_list.pack(side=RIGHT)
done_btn = Button(outframe_3, text="Done", command=commit_to_file, font=("Ariel", 15))
done_btn.pack(side=RIGHT, padx=20, pady=4)



#init to main screen
raise_frame(main)
#drawing objects for main screen
frame_pad1.pack(padx=1, pady=25)
frame_1.pack(padx=1,pady=1)
frame_2.pack(padx=10,pady=1)
frame_3.pack(padx=1, pady=80)
#drawing out screen
outframe_1.pack(padx=1, pady=1)
outframe_2.pack(padx=1,pady=1)
outframe_3.pack(padx=1, pady=1)



#calls line info update out screen
out_list.bind('<KeyRelease>', on_every_keyboard_input)


root.mainloop()

标签: pythontkinter

解决方案


您正在打印命令而不是它的值。将命令放入变量中,然后打印该变量。示例:myVar = out_list.get("1.0", "end-1c")然后print(myVar)


推荐阅读