【问题标题】:Difference between working with tkinter and tix (as tkinter?)使用 tkinter 和 tix 之间的区别(作为 tkinter?)
【发布时间】:2015-04-08 14:17:43
【问题描述】:

和启动程序有什么区别

from tkinter import *

from tkinter import tix as tk

因为后一个我遇到了问题,因此提出了问题。我已将所有 tkinter 元素从普通的 'Button' 更改为 'tk.Button',但这似乎不是它的唯一区别。

特别是我在以下代码位中有问题:

class OptionMenus(OptionMenu):
    def __init__(self, master, status, *fonts):
        self.var = StringVar(master)
        self.var.set(status)
        OptionMenu.__init__(self, master, self.var, *fonts,
                            command = update_config)
        self.config(width = "9", height = "1")

class OptionMenus(tk.OptionMenu):
    def __init__(self, master, status, *fonts):
        self.var = tk.StringVar(master)
        (self.var).set(status)
        (tk.OptionMenu).__init__(self, master, self.var, *fonts,
                                 command = update_config)
        self.config(width = "9", height = "1")

(以防万一我怎么称呼它)

fonts_menu = OptionMenus(buttons, strings[17], *fonts)

后一个会产生错误:“TypeError: init() 采用 2 到 3 个位置参数,但给出了 4 个。” 第一个效果很好。

【问题讨论】:

  • 可能值得指出的是,tkinter.OptionMenutkinter.tix.OptionMenu 是完全不同的类,尽管它们具有相同的名称。例如,它们的初始化签名不同:分别为(self, master, variable, value, *values, **kwargs)(self, master, cnf={}, **kw)
  • 非常感谢,我会马上调查的。 tix one 有更多的功能和选项吗?为什么翻倍了?

标签: python tkinter tix


【解决方案1】:

tix 和 tk 是两个独立的模块。它们有一些名称相似的小部件,但它们不是可互换的库。

如果你想使用 tix,你应该从 tkinter 中单独导入它,并且你应该进行全局导入,因为它会导致歧义,这可能是你遇到问题的原因。 p>

像这样导入它们:

import tkinter as tk
from tkinter import tix

然后,像这样使用小部件:

tk.Button(...)
tix.OptionMenu(...)

然后就很清楚哪些小部件来自哪些库。

【讨论】:

  • 我尝试分别导入它们,但后来我的 tkinter 元素停止正常工作。我应该如何将它们都导入,以便两者都可以单独使用?
  • @wanaryytel:这完全取决于您所说的“停止正常工作”是什么意思。至于如何导入它们,您应该进行全局导入。将它们导入为import tkinter(或import tkinter as tk)和import tix。不要这样做import tix as tk,因为那会非常混乱。
  • 谢谢,我会记住的。现在我尝试使用import tkinter,所有 tkinter 元素开始以下列方式给我错误: NameError: name 'OptionMenu' is not defined。当我尝试使用import tkinter as tk 时,它似乎正在工作(至少在我使用前几个元素进行测试时没有错误)。关于为什么 import tkinter 不能按预期工作的任何想法?
  • 我没有名为tix的模块,只能从tkinter导入tix。
  • @wanaryytel: import tkinter 确实按预期工作。我认为您误解了导入的工作原理。当您执行import tkinter 时,它会导入一件事 - 一个名为tkinter 的模块。然后,您可以通过在它们前面加上模块名称(tkinter.Buttontkinter.Label 等)来访问所有小部件。这就是所有 python 包的工作方式。当您执行 from tkinter import * 时,您不必使用前缀。不推荐这种方法;见python.org/dev/peps/pep-0008/#imports
猜你喜欢
  • 2013-07-24
  • 2013-04-05
  • 2021-02-17
  • 2013-03-10
  • 1970-01-01
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多