Python 在tkinter帧中输入数据

Python 在tkinter帧中输入数据,python,tkinter,Python,Tkinter,我正在写一个程序来保持14-1台球比赛的比分。因为我需要多个窗口,所以我使用了tkinter框架。两页的框架很难完成。我的问题是输入数据。每个玩家姓名中要输入的第一项。两个文本框都显示在屏幕上,可以输入数据。如果我在输入数据后试图显示数据,我将一无所获。我已经为此工作了好几天了。我相信有人会看到它,然后说嘿,指节头,你做得对。我需要一些帮助 import tkinter as tk from tkinter import * TITLE_FONT = ("Helvetica", 18, "b

我正在写一个程序来保持14-1台球比赛的比分。因为我需要多个窗口,所以我使用了tkinter框架。两页的框架很难完成。我的问题是输入数据。每个玩家姓名中要输入的第一项。两个文本框都显示在屏幕上,可以输入数据。如果我在输入数据后试图显示数据,我将一无所获。我已经为此工作了好几天了。我相信有人会看到它,然后说嘿,指节头,你做得对。我需要一些帮助

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
。这是一种方法,但不是唯一的方法。同意,但这通常是一种好方法,并且与其他小部件一致。