【发布时间】:2021-04-22 08:55:56
【问题描述】:
我有一个名为buttongen 的类,它根据建筑物内的房间生成按钮。将对房间进行评估,并将结果存储在数据库中。如何返回按钮上的文本值以存储在变量中?每次我尝试存储房间的结果时,它都会给出错误TypeError: __init__() missing 2 required positional arguments: 'i' and 'row'。
编辑:包括搜索建筑物和生成按钮的代码部分
def search():
global screen13
global btn
screen13 = Tk()
screen13.geometry("300x250")
screen13.title("Rooms")
sitename3_info = sitename.get().strip()
if sitename3_info:
cursor = cnn.cursor()
# combine the two SQL statements into one
sql = ("SELECT roomname FROM rooms, Sites "
"WHERE rooms.siteID_fk2 = Sites.siteID AND siteName = %s")
cursor.execute(sql, [sitename3_info])
rooms = cursor.fetchall()
# remove previous result (assume screen13 contains only result)
for w in screen13.winfo_children():
w.destroy()
if rooms:
for i, row in enumerate(rooms):
buttongen(i, row)
else:
Label(screen13, text="No room found").grid()
class buttongen():
def __init__(self,i,row):
# creates a self generated amount of buttons which correspond to the amount of rooms in the table.
self.i = i
self.row = row
self.roomname = self.row[0]
self.btn = Button(screen13, text = self.roomname, command=lambda :[print(self.roomname), action()])
self.btn.grid(row=i, column=0)
def showroomname(self):
print(self.roomname)
如何在roomclicked_info = buttongen() 中存储按钮上的文本
【问题讨论】:
-
您的
__init__需要 2 个元素i和row。 -
您的问题源于您创建实例的位置。你没有向我们展示那部分代码。此外,将完整的错误回溯添加到问题中。
-
当你调用一个类来创建它的实例时,返回值自动为
self。执行此操作时会自动调用类的__init__(),但是当您调用该类时,您没有传递所需的i和row参数,这是导致错误的原因。您需要更多地学习课程并更好地了解如何使用它们。