【问题标题】:AttributeError: Message instance has no attribute 'pack'AttributeError:消息实例没有属性“包”
【发布时间】:2012-12-31 18:36:43
【问题描述】:

我将 Tkinter 用于 GUI,但我遇到了一个问题: 我尝试制作一个消息小部件,当我写的时候:

body = Message(top, bd = 2)
body.pack(side=RIGHT)

我收到此错误:

body.pack(side=RIGHT)
AttributeError: Message instance has no attribute 'pack'

我不明白这一点,因为我查看了一些指南并且允许以这种方式使用“消息”,如示例中所示:http://www.tutorialspoint.com/python/tk_message.htm

还有其他写法吗?

【问题讨论】:

  • 您可能拥有不同版本的 Tkinter,或者您已将其他名称为 Message 的内容导入命名空间。您的导入语句是什么样的?
  • 感谢您的快速响应。这是我的导入语句的样子: from socket import * from base64 import * from Tkinter import * from tkMessageBox import *
  • 我不知道如何在 cmets 中组织代码,我是新手,对不起..
  • from ... import * 通常是个坏主意,因为它使您很难分辨代码中的内容。试试print(Message) 看看这个类是从哪里来的。
  • 这是我写 print(message) 时得到的:

标签: python python-3.x python-2.7 tkinter


【解决方案1】:

Tkinter 中至少有两个 Message 类。其中一个来自tkMessageBox.Message,另一个来自Tkinter.Message。前者是tkCommonDialogDialog 的子类,由于打包对话框没有意义,因此没有pack 方法适用于这种情况。后者是一个名为 message 的 Tk 小部件,这是您想要的;作为一个小部件,打包它是有意义的。

您的完整代码大多类似于以下形式(Python 2):

from Tkinter import *
from tkMessageBox import *

第二个导入隐藏了第一个导入的Message 类。要使用您所追求的Message 类,只需将上面的代码更改为:

from Tkinter import *
import tkMessageBox

然后相应地调整您的代码。

【讨论】:

  • 更好的建议是 IMO 提倡非全球进口,例如 import Tkinter as tk
  • 感谢您的帮助,但似乎还有其他问题?消息不应该是多行输入吗?因为它只是一个带有我在代码中编写的文本的文本框。我不能在这个盒子里写..
  • 它是一个多行标签,与输入小部件相反。
猜你喜欢
  • 1970-01-01
  • 2018-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 2017-07-22
  • 2015-02-19
  • 1970-01-01
相关资源
最近更新 更多