【问题标题】:Tkinter Toplevel TypeErrorTkinter 顶级类型错误
【发布时间】:2015-12-06 17:37:19
【问题描述】:

我正在尝试通过按钮命令创建一个新的 TopLevel,但是我遇到了一些困难。使用以下代码:

 initial_state_button = Button(current_state, text=current_state_text, command = partial(initial_state_display, aatsplusv))
 initial_state_button.pack(side = TOP)

....

def initial_state_display(dictionary):

    top = Toplevel()
    top.title = "About this State:"

    count = 0
    for key, value in dictionary["initial states"].iteritems():
        proposition = Message(top, text = key)
        proposition.grid(row=count, column=0, padx=5, pady=5)
        colon = Message(top, text = " : ")
        colon.grid(row=count, column=1, padx=5, pady=5)
        boolean = Message(top, text = str(value))
        colon.grid(row=count, column=2, padx=5, pady=5)
        count += 1

我收到以下错误:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1536, in __call__ return self.func(*args)
File "Assignmentest.py", line 400, in initial_state_display top = Toplevel()
File "C:\Python27\lib\lib-tk\Tkinter.py", line 2136, in __init__ self.title(root.title())
TypeError: 'str' object is not callable

我不知道出了什么问题。 top = Toplevel 完全按照 effbot 示例所示的方式编写。 Python 2.7 中不提供顶层吗?如果有,是否有相当于 2.7 的版本?

【问题讨论】:

  • 能否提供MCVE
  • 试试Toplevel(root)(或者任何你称之为主窗口的东西,如果不是root
  • 你有没有想过这个问题?

标签: python button tkinter typeerror toplevel


【解决方案1】:

您声明top 标题的那一行是错误的。你的线路

top.title = "About this State:"

应该是这样的:

top.title("About this State:")

更多信息请参见effbot docs


因评论而编辑:

我的系统上刚刚安装了 Python3,但是像这个蓝图这样的东西应该可以工作。代码不是很好,但显示了如何处理顶级窗口:

#!/usr/bin/env python3
# coding: utf-8

from tkinter import *


def btn_callback():
    top = Toplevel()
    top.title("Toplevel window")


root = Tk()
root.title('Main window')

b = Button(root, text="Open Toplevel", command=btn_callback)
b.pack()


root.mainloop()

如果您使用的是 Python2,则应将 tkinter 更改为 Tkinter,代码应该可以正常工作。

【讨论】:

  • 哇,这太尴尬了……我已经把它改成了正确的语法,但我仍然得到同样的错误。感谢您指出这一点。
  • @Bergy24:我刚刚添加了一个快速而肮脏的 sn-p 显示如何处理顶级窗口。
  • 谢谢。我已经尝试使用您在我的代码中提供的示例,它仍然会产生相同的错误,尽管当我自己运行它时它工作得很好。当我可以重现该问题时,将尝试提供更多信息。
  • 好的,很抱歉。我认为您应该缩小代码范围以找出此错误的原因并消除不必要的开销以重现您的问题。
  • Toplevel(root) 有什么变化吗?如果没有参数,则会创建一个隐藏的“默认 Tk()”,这可能会导致问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-10
  • 2019-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多