如何在Python中保存多个文本框对话框的输入?

时间:2017-01-25 20:26:39

标签: python ironpython

我正在尝试在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}}之后使用变量?

2 个答案:

答案 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())