Python 在tkinter帧中输入数据
我正在写一个程序来保持14-1台球比赛的比分。因为我需要多个窗口,所以我使用了tkinter框架。两页的框架很难完成。我的问题是输入数据。每个玩家姓名中要输入的第一项。两个文本框都显示在屏幕上,可以输入数据。如果我在输入数据后试图显示数据,我将一无所获。我已经为此工作了好几天了。我相信有人会看到它,然后说嘿,指节头,你做得对。我需要一些帮助Python 在tkinter帧中输入数据,python,tkinter,Python,Tkinter,我正在写一个程序来保持14-1台球比赛的比分。因为我需要多个窗口,所以我使用了tkinter框架。两页的框架很难完成。我的问题是输入数据。每个玩家姓名中要输入的第一项。两个文本框都显示在屏幕上,可以输入数据。如果我在输入数据后试图显示数据,我将一无所获。我已经为此工作了好几天了。我相信有人会看到它,然后说嘿,指节头,你做得对。我需要一些帮助 import tkinter as tk from tkinter import * TITLE_FONT = ("Helvetica", 18, "b
import tkinter as tk
from tkinter import *
TITLE_FONT = ("Helvetica", 18, "bold")
TITLE_FONT_LINE2 = ("Helvetica", 14, "bold")
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
# the container is where we'll stack a bunch of frames
# on top of each other, then the one we want visible
# will be raised above the others
container = tk.Frame(self)
container.pack(side="top", fill="both", expand=True)
container.grid_rowconfigure(0, weight=1)
container.grid_columnconfigure(0, weight=1)
self.frames = {}
for F in (StartPage, PageOne, PageTwo):
page_name = F.__name__
frame = F(parent=container, controller=self)
self.frames[page_name] = frame
# put all of the pages in the same location;
# the one on the top of the stacking order
# will be the one that is visible.
frame.grid(row=0, column=0, sticky="nsew")
self.show_frame("StartPage")
def show_frame(self, page_name):
'''Show a frame for the given page name'''
frame = self.frames[page_name]
frame.tkraise()
class StartPage(tk.Frame):
def __init__(self, parent, controller):
player1 = StringVar()
player2 = StringVar()
game_balls = IntVar()
tk.Frame.__init__(self, parent)
self.controller = controller
self.configure(background='green')
self.controller.title('Billard Score Keeping')
label1 = tk.Label(self,text="This Program is for Scoring 14-1 Straight Pool", font=TITLE_FONT, bg = 'green')
label1.pack()
label = tk.Label(self, text="Championship 14-1 Match is 150 Balls", font=TITLE_FONT_LINE2, bg = 'green')
label.pack()
label2 = tk.Label(self,text="Player One Name ", font=TITLE_FONT_LINE2, bg = 'green').place(x=45,y=70)
label3 = tk.Label(self,text='Player Two Name', font=TITLE_FONT_LINE2, bg = 'green').place(x=445,y=70)
label4 = tk.Label(self,text='Enter Number of Balls in Match', font=TITLE_FONT_LINE2, bg = 'green').place(x=185,y=110)
# Here is where I'm Having difficulty:
self.entry = tk.Entry(self, text=player1, width=7, font=TITLE_FONT_LINE2).place(x=60,y=100)
self.entry = tk.Entry(self,text=player2, width=7, font=TITLE_FONT_LINE2).place(x=480,y=100)
self.entry = tk.Entry(self,text=game_balls, width=4, font=TITLE_FONT_LINE2).place(x=275,y=140)
button1 = tk.Button(self, text="Go to Page One",
command=lambda: controller.show_frame("PageOne"))
button2 = tk.Button(self, text="Go to Page Two",
command=lambda: controller.show_frame("PageTwo"))
button1.place(x=275,y=440)
button2.place(x=275,y=540)
class PageOne(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
self.controller.geometry('615x615+415+190')
label = tk.Label(self, text="This is page 1", font=TITLE_FONT)
label.pack(side="top", fill="x", pady=10)
button = tk.Button(self, text="Go to the start page",
command=lambda: controller.show_frame("StartPage"))
button.pack()
class PageTwo(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.controller = controller
label = tk.Label(self, text="This is page 2", font=TITLE_FONT)
label.pack(side="top", fill="x", pady=10)
button = tk.Button(self, text="Go to the start page",
command=lambda: controller.show_frame("StartPage"))
button.pack()
if __name__ == "__main__":
app = SampleApp()
app.mainloop()
你的代码和帖子太乱了。 关于您的问题:我建议您使用GET方法,从每个输入框使用GET方法获取数据,然后将其归于变量,这是从输入框获取数据的最简单方法。在像您这样的应用程序中,我在输入框附近创建按钮,在命令属性中执行类似的操作
bttn = Button(self, text='enter', command=self.txt_box.get(0, END))
我看不到有人试图访问文本输入小部件的内容。因此,您的代码完全符合我的预期 如果要读取文本输入小部件的内容,应创建一个
StringVar
来保存内容
self.playerone = StringVar()
self.entry1 = ttk.Entry(parent, textvariable=playerone)
然后可以从playerne
变量的内容中读取条目的内容,例如playernename=self.playerne.get()
(当然,该变量必须在名称空间中使用完全限定的名称)
条目小部件上有文档,位于和是否可以将错误作为注释或在代码之外报告,以便我们可以运行您的代码?@nuncomeesquecideti^将注释编辑为内联注释。代码不返回错误。这有助于解决您的问题吗?方法不是GET,而是
GET
。案例很重要,尤其是在帮助初学者时。另外,您的命令将在s上定义按钮时而不是单击按钮时运行。对于记录,您不必创建StringVar
。这是一种方法,但不是唯一的方法。同意,但这通常是一种好方法,并且与其他小部件一致。