簡體   English   中英

Python-tkinter'AttributeError:'NoneType'對象沒有屬性'xview'

[英]Python - tkinter 'AttributeError: 'NoneType' object has no attribute 'xview''

我正在嘗試在“ DISABLED Entry窗口小部件上放置滾動條。 但是,它總是出現錯誤AttributeError: 'NoneType' object has no attribute 'xview' 是因為沒有返回值,還是無論是否返回值,都應該顯示小部件?

下面是我程序的代碼; 我已注釋掉滾動條的代碼:

from tkinter import *
from tkinter import ttk

def calculate(*args):
    try:
        value = int(binary.get(), 2)
    except ValueError:
        pass

    decimal.set(value)

root = Tk()
root.title("Binary to Decimal Converter")
root.wm_iconbitmap("python-xxl.ico")

mainframe = ttk.Frame(root, padding = "3 3 12 12")
mainframe.grid(column = 0, row = 0, sticky = (N, W, E, S))
mainframe.columnconfigure(0, weight = 1)
mainframe.rowconfigure(0, weight = 1)

binary = StringVar()
decimal = StringVar()

binary_entry = ttk.Entry(mainframe, width = 30, textvariable = binary)
binary_entry.grid(column = 2, row = 1, sticky = (W, E))

decimalView = ttk.Entry(mainframe, state = DISABLED, background = "gray99", width = 30, textvariable = decimal).grid(column = 2, row = 2, sticky = W)
"""scrollbar = Scrollbar(mainframe, orient = HORIZONTAL, command = decimalView.xview)
scrollbar.grid(column = 2, row = 3, sticky = (N, S, E, W))
decimalView.config(command = scrollbar.set)"""
ttk.Button(mainframe, text = "Calculate", command = calculate).grid(column = 3, row = 3, sticky = W)

ttk.Label(mainframe, text = "Binary").grid(column = 3, row = 1, sticky = W)
ttk.Label(mainframe, text = "Decimal").grid(column = 3, row = 2, sticky = W)

for child in mainframe.winfo_children():
    child.grid_configure(padx = 5, pady = 5)

binary_entry.focus()
root.bind("<Return>", calculate)

root.mainloop()

問題在於grid返回None而不是self

因此,當您這樣做時:

decimalView = ttk.Entry(mainframe, state = DISABLED, background = "gray99", width = 30, textvariable = decimal).grid(column = 2, row = 2, sticky = W)

…您正在將decimalView設置為None 這就是為什么錯誤消息告訴您無法在None上找到xview屬性的原因。

這不是Tkinter的怪癖。 list.sortfile.write ,幾乎Python中以任何方式進行對象變異的每個方法都返回None (或者有時返回一些其他有用的值,但從不返回self )。

只需將其寫在兩行上:構造Entry並將其分配給decimalView ,然后對其進行grid

除了擁有工作代碼的次要好處外,您還將擁有更具可讀性的代碼,這些代碼不會在StackOverflow或大多數文本編輯器上滾動到屏幕的右側。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM