是的,您可以通过更改类变量store_number 和tld_date 将它们分开。为此,您需要获取输入框中的数字并将它们保存为变量。我们可以通过调用self.store_number = self.entStore.get() 或self.tld_date = self.entDate.get() 方便地做到这一点
MainUI.py
>
from tkinter import *
class LaunchMainUi:
store_number = ''
tld_date = ''
def __init__(self, root):
self.root = root
root.title("TacoBell TLD Tool")
self.store_number = IntVar()
self.tld_date = IntVar()
Label(root, text="Store Number (XXXXXX): ").grid(row=0, sticky=E) # Sticky align text North(N), East(E), South(S), West(W)
Label(root, text="TLD Date(MM/DD/YYYY): ").grid(row=1, sticky=E)
self.entStore = Entry(self.root)
self.entDate = Entry(self.root)
self.entStore.grid(row=0, column=1)
self.entDate.grid(row=1, column=1)
self.confirm = Button(root, text="Confirm", command=self.save)
self.confirm.grid(row=2, column=1)
def save(self, event=None):
storeNumber = self.entStore.get()
tldDate = self.entDate.get()
#Saved as method variables ^ in order to perform necessary validation checks easier
#If entered items are valid:
self.store_number = storeNumber
self.tld_date = tldDate
self.root.destroy()
我首先更改了类名,以便文件名和类名不会冲突。然后我创建了一个名为self.confirm 的按钮并将其命令设置为self.save。此函数将两个变量存储为storeNumber 和tldDate,然后将类变量设置为输入的内容并销毁根窗口。
控制器.py
>
import MainUI
from tkinter import *
root = Tk()
ui = MainUI.LaunchMainUi(root)
root.mainloop() #Keeps the ui instance running until closed, then the rest of the code is run
storeNum = ui.store_number
tldDate = ui.tld_date
print('Store Number: {}\nTLD Date: {}'.format(storeNum, tldDate)) #This line is to show that the variables can be accessed
因为我们销毁了根实例,所以返回了 mainloop() 函数,这意味着它下面的任何代码都将运行。只要 UI 是打开的,它下面的代码就不会运行。因此,当根窗口关闭时,它下面的代码会运行并保存两个变量以供以后使用。您应该在注释掉的地方添加一些错误检查代码。
使用 .pack()
我个人远离使用.grid(),因为它可能有点令人困惑。相反,我喜欢使用 .pack() 和 encapsulation. 如果您想改用 .pack(),这里还有另一个 __init__,它的工作原理是一样的。我还让__init__ 上的 GUI 看起来不那么标准,并带有一些 TacoBell 颜色:)
def __init__(self, root):
self.root = root
self.root.title("TacoBell TLD Tool")
self.root.geometry('600x300')
font20 = 'Calibri 20'
bfont20 = font20 + ' bold'
Label(self.root, text='TacoBell TLD Tool', font=bfont20, fg='purple').pack()
topItems = Frame(self.root)
Label(topItems, text="Store Number (XXXXXX): ", font=font20).pack(side=LEFT) # Sticky align text North(N), East(E), South(S), West(W)
self.entStore = Entry(topItems, font=font20)
self.entStore.pack(side=RIGHT)
topItems.pack(pady=20)
lowItems = Frame(self.root)
Label(lowItems, text="TLD Date(MM/DD/YYYY): ", font=font20).pack(side=LEFT)
self.entDate = Entry(lowItems, font=font20)
self.entDate.pack(side=RIGHT)
lowItems.pack(pady=20)
self.confirm = Button(root, text="Confirm", bg='purple', fg='white', font=bfont20, width=30, command=self.save)
self.confirm.pack()