我正在尝试在ironpython中构建一个对话框窗口,该窗口为具有多列的表的用户输入提供多个文本框。但是,我很难将用户输入值传递给另一个函数。我的代码如下:
self.newVal = []
for column in columns:
self.label = Label()
self.label.Text = col
self.label.Location = Point(10, offset)
self.cb = Textbox()
self.cb.Text = "Type in new value"
self.cb.Location = Point(150,offset)
self.cb.Height = 20
self.cb.Width = 295
self.cb.Enabled = True
self.Controls.Add(self.label)
self.Controls.Add(self.cb)
self.newVal.append(self.cb.Text)
offset = offset + 30
问题是从这段代码传递的self.newVal只是“输入新值”的原始消息,当被另一个函数调用时,它并不真正采用文本框中的用户输入值。实际上,如果从另一个函数引用self.cb.Text
,则该值是用户新键入的值。但这对我不起作用,因为self.cb.Text
只给出了最后一列的输入。虽然self.newVal
包含所有列值,但它没有使用上述用户输入更新。
另一个相关问题。我试图通过定义多个Textbox并单独传递它来解决这个问题。但我找不到在self.
之后使用变量的方法。例如,在上面的代码中,如果我使用
self.col
代替self.cb
,代码并没有真正将col
视为变量,我得到的只是self.col
col
为字符串self.cb
,与使用self.
完全相同。是否可以在类{{1}}之后使用变量?
答案 0 :(得分:1)
谢谢furas!使用self.all_cb.append(self.cb)
代替self.newVal.append(self.cb.Text)
解决了问题。
答案 1 :(得分:0)
正如furas所提到的,您需要将每个初始化的TextBox添加到列表中,或者为每个TextBox创建一个新变量。例如:
self.textbox_list = []
for _ in columns:
textbox = TextBox()
self.textbox_list.append(textbox)
虽然我更愿意引用词典,其中键是列:
self.textbox_dict = {}
for i in range(columns):
textbox = TextBox()
# Here you can manipulate the textbox
self.textbox_dict[i] = textbox
# Then reference each TextBox by column number
val = self.textbox_dict[0].Text
您还可以创建一个类函数来初始化表。这里我还展示了如何使用setattr动态创建TextBox对象变量名的示例。
class MyClass:
columns = 8
self.init_table(columns)
# Then you can reference the textbox by variable name
val = self.textbox_0.Text
def init_table(self, cols):
for i in range(cols):
setattr(self, "textbox_{}".format(i), TextBox())