Ошибка имени Tkinter: окно зависает

Я следую инструкциям, которые можно найти здесь на страницах 31 и 32 http://www.ittc.ku.edu/~niehaus/classes/448-s04/448-standard/tkinter-intro.pdf .

Я получаю два окна, одно с кнопками «ОК» и «Отмена» и двумя полями ввода, а другое пустое. Когда я нажимаю «ОК» или «Отмена», это окно исчезает, но другое пустое окно зависает, и я даже не могу его закрыть. Единственный способ закрыть его — закрыть командную строку.

Я получаю следующую ошибку при запуске.

first = string.atoi(self.e1.get())
NameError: global name 'string' is not defined

Я настроил dialog2.py, как показано в моих комментариях. tkSimpleDialog.py вообще не меняется (стр. 31 ссылки выше)

# File: dialog2.py

import tkSimpleDialog #added this
import os #added this
from Tkinter import * #added this

class MyDialog(tkSimpleDialog.Dialog):

    def body(self, master):

        Label(master, text="First:").grid(row=0)
        Label(master, text="Second:").grid(row=1)

        self.e1 = Entry(master)
        self.e2 = Entry(master)

        self.e1.grid(row=0, column=1)
        self.e2.grid(row=1, column=1)

        return self.e1 # initial focus

    def apply(self):
        first = string.atoi(self.e1.get())
        second = string.atoi(self.e2.get())
        print first, second # or something

root = Tk() #added this
d = MyDialog(root) #added this

person user1104854    schedule 22.10.2012    source источник


Ответы (1)


Вам нужно импортировать модуль string.

Хотя лучший способ сделать это (без необходимости импорта строки) — использовать встроенную функцию int. то есть изменить его на:

first = int(self.e1.get())

и т.п.

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

person mgilson    schedule 22.10.2012
comment
Я изменил его на int, как было предложено, но теперь я получаю следующую строку ошибки 23 при применении: ValueError: недопустимый литерал для int() с базой 10: '' . В трассировке я получаю файл C:\...\tkSimpleDialog.py, строка 71, в ok self.apply() Кроме того, пустое окно все еще зависает, и единственный способ закрыть его - закрыть командную строку - person user1104854; 22.10.2012
comment
@user1104854 user1104854 -- вы пробовали напечатать self.e1.get() перед преобразованием в int? Какова ценность? - person mgilson; 22.10.2012
comment
Оно работает! Спасибо. Я думаю, вы правы, я должен попытаться найти более новое руководство. - person user1104854; 22.10.2012