почему мой цикл tk с вкладками for содержит ошибку "tabs [upper_tabs] = self.tab TypeError: unhashable тип: 'list'" - PullRequest
0 голосов
/ 20 октября 2018

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

tabs[upper_tabs] = self.tab
TypeError: unhashable type: 'list'

Я предполагаю, что это то, как я ссылаюсь на словарь.Не могли бы вы помочь мне понять и исправить ошибку.

import tkinter as tk 
from tkinter import ttk

upper_tabs = ["Final", "Requests"]
tabs = {}

class Application(ttk.Frame): #inherent from frame.
    def __init__(self, parent):
        tk.Frame.__init__(self, parent, bg="ivory2")
        self.parent = parent
        self.pack()

    self.tabControl = ttk.Notebook(self, width="900", height= "350") # 
       Create Tab Control

    for names in upper_tabs:
        self.tab=ttk.Frame(self.tabControl)# Create a tab
        self.tabControl.add(self.tab, text=names)      # Add the tab
        tabs[names] = self.tab
        self.tabControl.pack(expand=1, fill="both")  # Pack to make visible
        self.grid()

def main():
    root = tk.Tk()
    root.title("class basic window")
    root.geometry("1200x600")
    root.config(background="LightBlue4")
    app = Application(root)
    root.mainloop()

if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 20 октября 2018

Я не совсем понимаю, что вы хотите сделать, но устранить ошибку и сделать программу похожей на это ... enter image description here (уменьшено) ... это изменитьстрока tabs[upper_tabs] = self.tab до tabs[tuple(upper_tabs)] = self.tab.

Это работает, потому что tuple не может изменить , и, следовательно, его можно использовать в качестве словарного ключа, который list не может бытьПодробнее о словарях Python см. эту страницу .

...