2012-04-18 30 views
8

Tôi đã thử một ví dụ về mã python tại Rosetta Code - một trang web programming chrestomathy, nơi các giải pháp cho cùng một tác vụ được trình bày bằng nhiều ngôn ngữ lập trình khác nhau nhất có thể. Đối với nhiệm vụ này, mục tiêu là nhập chuỗi và số nguyên 75000, từ giao diện người dùng đồ họa. Mã này được hiển thị dưới đây:Lỗi trong một ví dụ tkSimpleDialog tối thiểu

import tkSimpleDialog 

number = tkSimpleDialog.askinteger("Integer", "Enter a Number") 
string = tkSimpleDialog.askstring("String", "Enter a String") 

Tuy nhiên, khi tôi cố gắng chạy mã này, tôi nhận được lỗi sau:

Traceback (most recent call last): 
    File "C:\Users\vix\Documents\.cache\GUIexample.py", line 3, in <module> 
    number = tkSimpleDialog.askinteger("Integer", "Enter a Number") 
    File "C:\Python27\lib\lib-tk\tkSimpleDialog.py", line 262, in askinteger 
    d = _QueryInteger(title, prompt, **kw) 
    File "C:\Python27\lib\lib-tk\tkSimpleDialog.py", line 189, in __init__ 
    Dialog.__init__(self, parent, title) 
    File "C:\Python27\lib\lib-tk\tkSimpleDialog.py", line 53, in __init__ 
    if parent.winfo_viewable(): 
AttributeError: 'NoneType' object has no attribute 'winfo_viewable' 

đâu có thể vấn đề là gì?

Cảm ơn

+0

Đăng truy cập đầy đủ, không chỉ lỗi. Chúng tôi cần xem mã lỗi. – agf

+0

@agf Tôi đã chỉnh sửa câu hỏi để bao gồm cả lần truy nguyên. – engineervix

+0

Tôi đang sử dụng Python 2.7 trên Windows 7 Ultimate 32-Bit. 'root = Tkinter.tk()' không hoạt động, nó cung cấp 'NameError: name 'Tkinter' không được định nghĩa' – engineervix

Trả lời

12

Thông báo lỗi cho bạn biết rằng hộp thoại cần cửa sổ chính.

Với Python 2.x, bạn tạo ra các cửa sổ thư mục gốc với:

import Tkinter 
root = Tkinter.Tk() 

Để ẩn cửa sổ gốc nếu bạn không muốn nó, sử dụng:

root.withdraw() 

Xem Python Tkinter Docs cho thêm thông tin.

+0

* T * k thay vì tk ... Câu trả lời đúng bằng cách này. – FabienAndre

+0

@FabienAndre Cảm ơn, đã khắc phục. – agf

1

Tôi chưa bao giờ sử dụng askinteger, nhưng xét từ các thông báo lỗi nó trông giống như hộp thoại cần biết mẹ của nó nhưng bạn không nói với nó những gì cha mẹ của nó nên được. Hãy thử thêm parent=widget (trong đó "tiện ích" là tham chiếu đến một số tiện ích con khác - thường là tiện ích con gốc). Tôi không thể tìm thấy bất kỳ tài liệu nào nói rằng điều này là bắt buộc, nhưng tôi đoán đó là vì tất cả các tiện ích Tkinter ngoại trừ cửa sổ gốc cần phải có cha/mẹ.

Nếu mã bạn hiển thị trong câu hỏi là mã hoàn chỉnh, bạn đang thiếu một số thứ khác. Bạn cần tạo một thể hiện của lớp Tk (được gọi là cửa sổ "root") và bạn cần bắt đầu vòng lặp sự kiện (tuy nhiên, có thể hộp thoại chạy vòng lặp sự kiện của riêng nó, vì vậy bạn có thể OK nếu tất cả những gì bạn cần là hộp thoại duy nhất).

Các vấn đề liên quan