Я немного знаком с python и новичок в tkinter. Я пытаюсь расположить четыре кадра в сетке 2x2, и, как известно, у меня ничего не получается. Я попытался создать MWE, но даже это не удалось, так как он не работает и не воссоздает мою настоящую проблему, но создает свою собственную. Но обо всем по порядку, код MWE выглядит следующим образом:
import tkinter as tk
from tkinter import ttk
class DummyParent(ttk.Frame):
def __init__(self, master=None):
super().__init__(master)
master.title('Test')
self.children = []
for i in range(4):
self.children.append(DummyChild(self))
self.children[i].grid(row=i//2, column=i%2)
class DummyChild(ttk.Frame):
def __init__(self, master):
super().__init__(master)
self.state(ttk.Label(text='Test'))
root = tk.Tk()
dP = DummyParent(master=root)
dP.mainloop()
Что приводит к следующей трассировке стека:
File "E:/TI/internetofthings/python/tkinter_test.py", line 23, in <module>
dP = DummyParent(master=root)
File "E:/TI/internetofthings/python/tkinter_test.py", line 11, in __init__
self.children.append(DummyChild(self))
File "E:/TI/internetofthings/python/tkinter_test.py", line 17, in __init__
super().__init__(master)
File "C:\Users\Scipio\anaconda3\lib\tkinter\ttk.py", line 742, in __init__
Widget.__init__(self, master, "ttk::frame", kw)
File "C:\Users\Scipio\anaconda3\lib\tkinter\ttk.py", line 559, in __init__
tkinter.Widget.__init__(self, master, widgetname, kw=kw)
File "C:\Users\Scipio\anaconda3\lib\tkinter\__init__.py", line 2292, in __init__
BaseWidget._setup(self, master, cnf)
File "C:\Users\Scipio\anaconda3\lib\tkinter\__init__.py", line 2285, in _setup
self.master.children[self._name] = self
TypeError: list indices must be integers or slices, not str
Значение self._name
на момент ошибки это !dummyparent
. Что меня действительно смущает, так это то, что мой исходный код отлично работает до этого момента и за его пределами, хотя это почти то же самое с добавлением некоторых фактических функций. В той же строке кода библиотеки значение self._name
равно !firefightermonitor
, эквивалентное имя класса (в нижнем регистре с ведущим восклицательным знаком, как для MWE). Итак, есть идеи, что мне здесь не хватает? Или я просто неправильно использую tkinter?