Запись (self, textvar = firstName) дает NameError: имя 'firstName' не определено - PullRequest
0 голосов
/ 04 ноября 2018

Так что в основном я работаю над созданием программы с разными окнами / фреймами. На каждом из этих фреймов я ищу разные мини-программы, например, одно окно, позволяющее создать страницу входа, а затем другое, позволяющее зарегистрироваться. В настоящее время я могу переключаться между каждым кадром с помощью кнопок и иметь ярлыки на каждом кадре. У меня есть отдельная программа, которая позволяет зарегистрировать учетную запись и информацию о них, а затем другая отдельная программа, которая позволяет войти в учетную запись, которая проверяет правильность этой информации в создаваемой базе данных.

Моя основная проблема сейчас заключается в том, чтобы объединить это вместе с разными кадрами, позволяющими выполнять разные функции в моей общей программе. Моя главная проблема в настоящее время заключается в том, что всякий раз, когда я добавляю в поле ввода, программа выдает ошибки для моего init , которые я не понимаю. (Извините, я не очень продвинут в своих знаниях программирования, чтобы иметь возможность делать это так вот почему я прошу помощи)

[This is the error I get from when I add in an entrybox and even when I fix the variable by doing firstName = StringVar() it still isnt fixed

    from tkinter import *
    from tkinter import ttk
    from tkinter import messagebox
    import sqlite3



    class App(Tk):
            def __init__(self, *args, **kwargs):
                    Tk.__init__(self, *args, **kwargs)
                    Tk.iconbitmap(self, default="fishicon3.ico")
                    Tk.wm_title(self, "Crumlin Fishing Club")


                    #Setup Menu
                    MainMenu(self)
                    #Setup Frame
                    container = 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):
                            frame = F(container, self)
                            self.frames[F] = frame
                            frame.grid(row=0, column=0, sticky="nsew")

                    self.show_frame(StartPage)  
            def show_frame(self, context):
                    frame = self.frames[context]
                    frame.tkraise()

    class StartPage(Frame):
            def __init__(self, parent, controller):
                    Frame.__init__(self, parent)

                    label = Label(self, text="Start Page")
                    label.place(x=30,y=5)
                    start_page = ttk.Button(self, text="Start Page", command=lambda:controller.show_frame(StartPage))
                    start_page.place(x=25,y=25)
                    page_one = ttk.Button(self, text="Page One", command=lambda:controller.show_frame(PageOne))
                    page_one.place(x=25,y=50)
                    page_two = ttk.Button(self, text="Page Two", command=lambda:controller.show_frame(PageTwo))
                    page_two.place(x=25,y=75)
                    lblWelcome = Label(self, text="WELCOME! Welcome to the website of the Crumlin and District Angling Association owners of the fishing rights to the Crumlin River, Co. Antrim.",width=115,font=("bold", 10))
                    lblWelcome.place(x=500,y=50)





    class PageOne(Frame):
            def __init__(self, parent, controller):
                    Frame.__init__(self, parent)

                    label = Label(self, text="Page One")
                    label.place(x=30,y=5)
                    firstNameLabel = Label(self, text="First Name",width=20,font=("bold", 10))
                    firstNameLabel.place(x=350,y=100)
                    secondNameLabel = Label(self, text="Second Name",width=20,font=("bold", 10))
                    secondNameLabel.place(x=350,y=125)
                    usernameLabel = Label(self, text="Username",width=20,font=("bold", 10))
                    usernameLabel.place(x=350,y=150)
                    passwordLabel = Label(self, text="Password",width=20,font=("bold", 10))
                    passwordLabel.place(x=350,y=175)
                    genderLabel = Label(self, text="Gender",width=20,font=("bold", 10))
                    genderLabel.place(x=350,y=200)
                    countryLabel = Label(self, text="Country",width=20,font=("bold", 10))
                    countryLabel.place(x=350,y=225)
                    start_page = ttk.Button(self, text="Start Page", command=lambda:controller.show_frame(StartPage))
                    start_page.place(x=25,y=25)
                    page_one = ttk.Button(self, text="Page One", command=lambda:controller.show_frame(PageOne))
                    page_one.place(x=25,y=50)
                    page_two = ttk.Button(self, text="Page Two", command=lambda:controller.show_frame(PageTwo))
                    page_two.place(x=25,y=75)


    def database():
                    Username = username.get()
                    Password = password.get()
                    Gender = gender.get()
                    Country = country.get()
                    Animal = animal.get()
                    FirstName = firstName.get()
                    SecondName = secondName.get()
                    conn = sqlite3.connect('Database1.db')
                    with conn:
                            cursor=conn.cursor()
                    cursor.execute('CREATE TABLE IF NOT EXISTS Student (FirstName TEXT,SecondName TEXT,Gender TEXT,Country TEXT,Animal TEXT,username TEXT,password TEXT)')
                    cursor.execute('INSERT INTO Student (FirstName,SecondName,Gender,Country,Animal,Username,Password) VALUES(?,?,?,?,?,?,?)',(FirstName,SecondName,Gender,Country,Animal,Username,Password))
                    conn.commit()

    class PageTwo(Frame):
            def __init__(self, parent, controller):
                    Frame.__init__(self, parent)

                    label = Label(self, text="Page Two")
                    label.place(x=30,y=5)
                    start_page = ttk.Button(self, text="Start Page", command=lambda:controller.show_frame(StartPage))
                    start_page.place(x=25,y=25)
                    page_one = ttk.Button(self, text="Page One", command=lambda:controller.show_frame(PageOne))
                    page_one.place(x=25,y=50)
                    page_two = ttk.Button(self, text="Page Two", command=lambda:controller.show_frame(PageTwo))
                    page_two.place(x=25,y=75)

    class MainMenu:
            def __init__(self, master):
                    menubar = Menu(master)
                    filemenu = Menu(menubar, tearoff=0)
                    filemenu.add_command(label="Exit", command=master.quit)
                    menubar.add_cascade(label="File", menu=filemenu)
                    master.config(menu=menubar)


    app=App()
    app.geometry("1900x1000+0+0")
    app.mainloop()

Так что в основном это окна моей основной программы, и я пытаюсь затем реализовать на первой странице регистрацию для учетной записи, а затем на другой странице функцию входа в систему, но сейчас я покажу свою регистрационную программу только так, как я этого не делаю. знать, как реализовать это на первой странице.

  from tkinter import *
  import sqlite3

  root = Tk()
  root.geometry('800x400')
  root.title("Membership Application")


  username=StringVar()
  password=StringVar()
  gender=StringVar()
  country=StringVar()
  animal=StringVar()
  firstName=StringVar()
  secondName=StringVar()

  def database():
     Username=username.get()
     Password=password.get()
     Gender=gender.get()
     Country=country.get()
     Animal=animal.get()
     FirstName=firstName.get()
     SecondName=secondName.get()
     conn = sqlite3.connect('Database1.db')
     with conn:
        cursor=conn.cursor()
     cursor.execute('CREATE TABLE IF NOT EXISTS Student (FirstName TEXT,SecondName TEXT,Gender TEXT,Country TEXT,Animal TEXT,username TEXT,password TEXT)')
     cursor.execute('INSERT INTO Student (FirstName,SecondName,Gender,Country,Animal,Username,Password) VALUES(?,?,?,?,?,?,?)',(FirstName,SecondName,Gender,Country,Animal,Username,Password))
     conn.commit()

  title = Label(root, text="Registration form",width=20,font=("bold", 20))
  title.place(x=90,y=53)

  firstNameLabel = Label(root, text="First Name",width=20,font=("bold", 10))
  firstNameLabel.place(x=50,y=100)

  firstNameEntry = Entry(root,textvar=firstName)
  firstNameEntry.place(x=200,y=100)

  secondNameLabel = Label(root, text="Second Name",width=20,font=("bold", 10))
  secondNameLabel.place(x=50,y=125)

  secondNameEntry = Entry(root,textvar=secondName)
  secondNameEntry.place(x=200,y=125)

  usernameLabel = Label(root, text="Username",width=20,font=("bold", 10))
  usernameLabel.place(x=350,y=100)

  usernameEntry = Entry(root,textvar=username)
  usernameEntry.place(x=500,y=100)

  passwordLabel = Label(root, text="Password",width=20,font=("bold", 10))
  passwordLabel.place(x=350,y=125)

  passwordEntry = Entry(root,textvar=password, show ="*")
  passwordEntry.place(x=500,y=125)

  genderLabel = Label(root, text="Gender",width=20,font=("bold", 10))
  genderLabel.place(x=70,y=230)

  Radiobutton(root, text="Male",padx = 5, variable=gender, value="Male").place(x=235,y=230)
  Radiobutton(root, text="Female",padx = 20, variable=gender, value="Female").place(x=290,y=230)

  countryLabel = Label(root, text="Country",width=20,font=("bold", 10))
  countryLabel.place(x=70,y=280)

  countryList = ['Canada','India','UK','Nepal','Iceland','South Africa'];

  droplist=OptionMenu(root,country, *countryList)
  droplist.config(width=15)
  country.set('Select your country') 
  droplist.place(x=240,y=280)

  label_4 = Label(root, text="Animals",width=20,font=("bold", 10))
  label_4.place(x=85,y=330)
  animal2= IntVar()
  Checkbutton(root, text="Dog", variable=animal).place(x=235,y=330)
  Checkbutton(root, text="Cat", variable=animal2).place(x=290,y=330)

  Button(root, text='Submit',width=20,bg='brown',fg='white',command=database).place(x=500,y=280)

  root.mainloop()

Этот последний бит не превратится в код, но он все еще является частью программы регистрации. Итак, в основном, как мне это реализовать, я попробовал несколько способов перенести поля ввода и сделать так, чтобы база данных работала, но это просто не слилось воедино, и я нигде не смотрел, объясняя, как выполнить эту конкретную задачу: с различными функциями на каждом кадре.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...