在应用程序中添加新的 tkinter 模块以及调用其中条目的能力



以下是对python3 tkinter GUI作为mySQL数据库接口的引用。

我想知道是否可以通过按钮在应用程序内添加其他标签和条目。

以下是我的代码:

class Application(tk.Frame):
def __init__(self, master=None,x=None):
super().__init__(master)
self.master = master
self.pack()
self.create_widgets()
self.xy=x
def create_widgets(self):
self.label1=tk.Label(self, text="Athlete")
self.label1.grid(row=2)
self.Athlete=tk.Entry(self)
self.Athlete.grid(row=2, column=1)
self.button1=tk.Button(self,text='Commit')
self.button1['command']=self.Commit
self.button1.grid(row=3,column=0,columnspan=2)
self.label2=tk.Label(self,text="Program")
self.label2.grid(row=4,column=5)
self.Exercise=tk.Label(self,text="Exercise")
self.Exercise.grid(row=5,column=2)
self.Weight=tk.Label(self,text="Weight")
self.Weight.grid(row=5,column=3)
self.Sets=tk.Label(self,text="Sets")
self.Sets.grid(row=5,column=4)
self.Reps=tk.Label(self,text="Reps")
self.Reps.grid(row=5,column=5)
self.label4=tk.Label(self, text="Exercise 1")
self.label4.grid(row=7,column=1)
self.entry1=tk.Entry(self)
self.entry1.grid(row=7,column=2)
self.Weight1=tk.Entry(self)
self.Weight1.grid(row=7,column=3)
self.Sets1=tk.Entry(self)
self.Sets1.grid(row=7,column=4)
self.Reps1=tk.Entry(self)
self.Reps1.grid(row=7,column=5)
def Commit(self):
Weight=int(self.Weight1.get())
Sets=int(self.Sets1.get())
Reps=int(self.Reps1.get())
Volume=(Weight*Sets*Reps)
print(Weight, Sets, Reps, Volume)
root=tk.Tk()
app=Application(master=root)
app.mainloop()

我想要的是另一个按钮,它将用相同的标签和条目填充下一行,允许用户自定义他们输入的练习数量。

接下来,我需要一种方法来为 .get(( 函数调用这些新条目。 不理想的是:a(硬编码输入字段的数量b(只有一个输入字段

这个想法是用户可以输入任意数量的练习,使用"提交"按钮,它会将其发送到mySQL数据库。

任何其他额外的反馈将不胜感激。

谢谢

在我的示例中,我在方法create_top()中创建所有常见的 GUI 元素。

为了跟踪练习数 = 网格行,我创建了变量self.exercise_number。然后我在create_widgets()中创建每一行条目。

由于按下提交后我不需要在访问这些小部件,因此我重复使用对每个小部件的引用。

当我按下提交按钮时,它处理的每一行都Commit()

import tkinter as tk
class Application(tk.Frame):
def __init__(self, master=None, x=None):
super().__init__()
self.master = master
self.pack(padx=10, pady=10) # Added padding
self.exercise_number = 0    # Keeping track of grid row
self.create_top()
self.create_widgets()
def create_top(self):
# Create common GUI elements
tk.Label(self, text="Athlete").grid(row=2)
self.Athlete = tk.Entry(self)
self.Athlete.grid(row=2, column=1)
self.button1 = tk.Button(self, text='Commit')
self.button1['command'] = self.Commit
self.button1.grid(row=3, column=0, columnspan=2)
tk.Label(self,text="Program").grid(row=4, column=5)
tk.Label(self,text="Exercise").grid(row=5, column=2)
tk.Label(self,text="Weight").grid(row=5, column=3)
tk.Label(self,text="Sets").grid(row=5, column=4)
tk.Label(self,text="Reps").grid(row=5, column=5)
def create_widgets(self):
# Create new line of input fields
self.exercise_number += 1
row = 6 + self.exercise_number  # Calculate where to grid entrys
self.label4 = tk.Label(self, text=f"Exercise {self.exercise_number}")
self.label4.grid(row=row, column=1)
self.Exercise = tk.Entry(self)
self.Exercise.grid(row=row, column=2)
self.Weight = tk.Entry(self)
self.Weight.grid(row=row, column=3)
self.Sets = tk.Entry(self)
self.Sets.grid(row=row, column=4)
self.Reps = tk.Entry(self)
self.Reps.grid(row=row, column=5)
def Commit(self):
Weight = int(self.Weight.get())
Sets = int(self.Sets.get())
Reps = int(self.Reps.get())
Volume = (Weight*Sets*Reps)
print(Weight, Sets, Reps, Volume)
self.create_widgets()   # Add new row
root = tk.Tk()
app = Application(master=root)
app.mainloop()

相关内容

最新更新