Я создаю простой графический интерфейс с несколькими полями ввода, флажками и т. Д. И столкнулся с очень своеобразным поведением в классе Tkinter.Entry
, и мне интересно, если кто-то еще столкнулся с ним и/или если я просто делаю что-то глупое.Weird tk поведение в поле ввода
Я создал простой класс для обертывания каждого объекта Tkinter.Entry
и интерфейса. Я хотел бы реализовать способ изменить ширину каждого окна, поэтому я добавил в класс параметр width
. Когда я это сделал, все мои ящики стали «связаны», и когда я ввожу в один ящик, я ввожу в каждую коробку. прежде чем я реализовал эту функциональность, она отлично работала, и когда я ее вынимаю, она работает снова. Вот мой класс:
import Tkinter as tk
class EntryBox:
def __init__(self, master, row, column, default_val="", width=20):
self.val = tk.StringVar()
self.default_val = default_val
self.width = width
# with the width parameter specified
self.e = tk.Entry(master, text="cb_text", textvariable=self.val, width=self.width)
# without the width parameter specified (defaults to a width of 20)
# self.e = tk.Entry(master, text="cb_text", textvariable=self.val)
self.e.grid(row=row, column=column, sticky=tk.E)
self.e.insert(0, self.default_val)
def get_val(self):
return self.val.get()
def activate(self):
self.e.config(state=tk.NORMAL)
def deactivate(self):
self.e.config(state=tk.DISABLED)
def focus(self):
self.e.focus()
Вот моя программа без ширина параметр включен:
Вот моя программа с шириной параметра включены:
Как вы можете видеть, все значения по умолчанию, заполненные для каждого окна, и всякий раз, когда я их редактирую, я редактирую их все.
Вот как я создаю экземпляр каждого объекта (я не подозреваю, что это вопрос, но просто быть тщательным):
import Tkinter as tk
ip_addr_box = EntryBox(root, 1, 1, default_val="192.168.201.116")
ip_addr_label = tk.Label(root, text="IP Address").grid(row=1, column=2, sticky=tk.W)
# set up the IP port entry box
ip_port_box = EntryBox(root, 2, 1, default_val="8000")
ip_port_label = tk.Label(root, text="IP port").grid(row=2, column=2, sticky=tk.W)
# set up the number of plot points scroll box
# set up the filename entry box
filename_box = EntryBox(root, 4, 1, default_val="log.xlsx")
filename_label = tk.Label(root, text="File Name").grid(row=4, column=2, sticky=tk.W)
# set up how long the test lasts
meas_time_box = EntryBox(root, 3, 4, default_val="5", width=10)
meas_time_label = tk.Label(root, text="Measurement Period")
meas_time_label.grid(row=3, column=5, columnspan=2, sticky=tk.W)
test_time_box = EntryBox(root, 4, 4, default_val="30", width=10)
test_time_label = tk.Label(root, text="Test Duration").grid(row=4, column=5, columnspan=2, sticky=tk.W)
Я думаю, что это странно ошибка в Tkinter или что-то делать с namespaces
, о котором я не знаю достаточно.
EDIT: Я обновил код класса, чтобы указать, как я не включаю параметр ширины. Я просто не включаю его в качестве именованного аргумента при вызове tk.Entry
.
Просто попробовал еще раз с более неясным именем ('box_width'), и программа по-прежнему демонстрирует это поведение. – TylerH