Использование виджета Tkinter снизу вниз в программе - PullRequest
0 голосов
/ 06 мая 2018

Итак, я пытаюсь создать графический интерфейс tkinter, в котором вы можете добавить или выполнить поиск клиента (клиент хранится в базе данных SQlite). Проблема в том, что я не вижу способа сделать определение для нажатия кнопки добавления клиента, поскольку, насколько я знаю, мне нужно было бы использовать имена переменных снизу вниз в программе, где виджеты создано. Я мог бы изменить порядок функций, но тогда виджеты будут вызывать функции, которые еще не были созданы. Может кто-нибудь помочь исправить этот пробм? Заранее спасибо.

Вот код:

    from tkinter import *

app = Tk()
app.minsize(400,420)
app.title("Gatecode Manager")
app.resizable(False, False)

def add():
    first = createWindow().firstAdd.get()
    last = createWindow().firstAdd.get()
    phone = createWindow().numberAdd.get()


def createWindow():
    Label(text="Welcome to Gatecode Manager", font=("bold", 17)).grid(row=0, columnspan=2, pady=30, sticky=N)

    Label(text="Search for a Customer").grid(row=1, column=0, padx=30, pady=10)
    Label(text="First Name:").grid(row=2, column=0, padx=30, pady=10)
    firstSearch = Entry().grid(row=3, column=0, padx=30)
    Label(text="Last Name:").grid(row=4, column=0, padx=30, pady=10)
    lastSearch = Entry().grid(row=5, column=0, padx=30)

    Label(text="Add Customer to System").grid(row=1, column=1, padx=30, pady=10)
    Label(text="First Name:").grid(row=2, column=1, padx=30, pady=10)
    firstAdd = Entry().grid(row=3, column=1, padx=30)
    Label(text="Last Name:").grid(row=4, column=1, padx=30, pady=10)
    lastAdd = Entry().grid(row=5, column=1, padx=30)
    Label(text="Phone Number:").grid(row=6, column=1, padx=30, pady=10)
    numberAdd = Entry().grid(row=7, column=1, padx=30)
    add = Button(text="Add", command="null").grid(padx=30, pady=10, column=1)

    app.mainloop()

createWindow()

1 Ответ

0 голосов
/ 06 мая 2018

Мне трудно понять, как именно вы хотите, чтобы эта программа работала. Должна ли кнопка add вызывать функцию add(), которая затем вызывает createWindow()?

Я думаю, немного здесь, но как насчет:

1) Не создавайте графический интерфейс в функции. Функция будет хранить переменные в объеме функции.

2) Используйте StringVar () для доступа к записям. Поскольку вы не сохраняете личность своих записей, становится невозможным их допросить.

Пример:

from tkinter import *

app = Tk()
app.minsize(400,420)
app.title("Gatecode Manager")
app.resizable(False, False)

def add():
    first = firstAddVar.get()
    last = firstAddVar.get()
    phone = numberAddVar.get()

Label(text="Welcome to Gatecode Manager", font=("bold", 17)).grid(row=0, 
      columnspan=2, pady=30, sticky=N)
Label(text="Search for a Customer").grid(row=1, column=0, padx=30, pady=10)
Label(text="First Name:").grid(row=2, column=0, padx=30, pady=10)
firstSearchVar = StringVar()
firstSearch = Entry(textvar=firstSearchVar).grid(row=3, column=0, padx=30)
Label(text="Last Name:").grid(row=4, column=0, padx=30, pady=10)
lastSearchVar  = StringVar()
lastSearch = Entry(textvar=lastSearchVar).grid(row=5, column=0, padx=30)

Label(text="Add Customer to System").grid(row=1, column=1, padx=30, pady=10)
Label(text="First Name:").grid(row=2, column=1, padx=30, pady=10)
firstAddVar = StringVar()
firstAdd = Entry(textvariable=firstAddVar).grid(row=3, column=1, padx=30)
Label(text="Last Name:").grid(row=4, column=1, padx=30, pady=10)
lastAddVar = StringVar()
lastAdd = Entry(textvariable=lastAddVar).grid(row=5, column=1, padx=30)
Label(text="Phone Number:").grid(row=6, column=1, padx=30, pady=10)
numberAddVar = StringVar()
numberAdd = Entry(textvariable=numberAddVar).grid(row=7, column=1, padx=30)
add = Button(text="Add", command=add).grid(padx=30, pady=10, column=1)

app.mainloop()

Когда ваш графический интерфейс станет более сложным, вам следует изучить ООП.

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