Python Tkinter - Поместите несколько записей в течение - PullRequest
0 голосов
/ 31 декабря 2011

У меня есть код, который отображает несколько записей, и количество записей зависит от предыдущей записи, проблема в том, что у меня не может быть записей, чтобы быть независимыми.
Вот мой код (это только частьпроблема), с этим кодом появляется выбранное количество записей, но когда вы набираете одну, все записи редактируются.

#The variable amCon is acquired previously
for r in range(amCon):
    cant_entry = ttk.Entry(mainframe, textvariable=names)
    cant_entry.grid(column=0, row=r+1, sticky='WE')

Я хочу, чтобы каждая запись была частью спискатак что я могу использовать их отдельно.

Ответы [ 2 ]

1 голос
/ 31 декабря 2011

Я полагаю, вы хотите иметь другую переменную, чем cant_entry.Попробуйте список!

entries = []
entries.append(ttk.Entry(mainframe, textvariable=names))
entries[0]

Видите ли, когда вы помещаете разные вещи под одним и тем же именем (cant_entry), тогда все они появляются, но все они связаны с cant_entry.Когда вы редактируете один файл cant_entry, все остальные тоже редактируются.Список намного более динамичен, и вы можете использовать функцию добавления для размещения элементов в списке.Затем используйте записи [номер записи], чтобы получить то, что вы положили.

0 голосов
/ 31 декабря 2011

Вы присваиваете одну и ту же переменную всем виджетам ввода.Вам нужно либо создать отдельную переменную для каждого, либо просто не использовать опцию textvariable1.Эта опция не нужна - вы все равно можете получить и установить содержимое виджета, используя методы самого виджета.textvariable в основном для удобства (и потому, что иногда приятно поставить трассировку для переменной, чтобы вы знали, когда она меняется).

Вот надуманный пример, который имеет 5 записей, шестую запись, которая показываетзначение остальных пяти в виде списка:

import tkinter as tk
import ttk

class App(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)
        self.size=5
        self.vars = {}
        for i in range(self.size):
            self.vars[i] = tk.StringVar()
            entry = ttk.Entry(self, textvariable=self.vars[i])
            entry.pack(side="top", fill="x")
            self.vars[i].trace("w", self.callback)

        # this entry will show the other values as a list
        self.e0Var = tk.StringVar()
        self.e0 = ttk.Entry(self, textvariable=self.e0Var)
        self.e0.pack(side="top", fill="x", pady=(4,0))

        # call the callback once to establish the initial value
        self.callback()

    def callback(self, *args):
        values = []
        for i in range(self.size):
            values.append(self.vars[i].get())
        # make a comma separated list and store in e0Var
        self.e0Var.set(str(values))

app = App()
app.mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...