2015-04-08 5 views
2

Что именно разница между запуском программы сразница между работой с Tkinter и TIX (как Tkinter?)

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 p но были даны 4 аргумента. Первый работает отлично.

+1

Возможно, стоит отметить, что 'tkinter.OptionMenu' и' tkinter.tix.OptionMenu' - совершенно разные классы, хотя они имеют одинаковое имя. Например, их сигнатуры инициализации различаются: '(self, master, variable, value, * values, ** kwargs)' и '(self, master, cnf = {}, ** kw)' соответственно. – Kevin

+0

Большое спасибо, я сразу же изучу это. Есть ли у tix больше функций и возможностей или что? Почему он был удвоен? – makaveli

ответ

3

tix и tk представляют собой два отдельных модуля. У них есть некоторые виджеты с похожими именами, но они не являются взаимозаменяемыми библиотеками.

Если вы хотите использовать tix, вы должны импортировать его отдельно от tkinter, и вы должны не делать глобальный импорт, потому что это приводит к двусмысленности, что, скорее всего, вызывает у вас проблемы.

Импортируйте их, как это:

import tkinter as tk 
from tkinter import tix 

Затем используйте виджеты, как это:

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

Это становится кристально ясно, какие виджеты приходят из которых библиотеки.

+0

Я попытался импортировать оба из них отдельно, но затем мои элементы tkinter перестали нормально работать. Как я должен импортировать их оба, так что оба они могут использоваться отдельно? – makaveli

+0

@wanaryytel: все зависит от того, что вы подразумеваете под «перестали нормально работать». Что касается того, как импортировать их, вы не должны делать глобальный импорт. Импортируйте их как 'import tkinter' (или' import tkinter as tk') и 'import tix'. Не делайте 'import tix как tk', потому что это будет очень запутанным. –

+0

Спасибо, я буду помнить об этом. Теперь, когда я пытаюсь использовать 'import tkinter', все элементы tkinter начинают давать мне ошибки следующим образом: NameError: name 'OptionMenu' не определен. Когда я даю ему попробовать с 'import tkinter as tk', то он, похоже, работает (по крайней мере, нет ошибок, когда я тестировал первую пару элементов). Любые идеи относительно того, почему не «импортируют tkinter', работают так, как должны? – makaveli