Roy*_*ish 1 python tkinter scrollbar
我正在尝试在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()
Run Code Online (Sandbox Code Playgroud)
问题是 grid回报None,而不是self.
所以,当你这样做时:
decimalView = ttk.Entry(mainframe, state = DISABLED, background = "gray99", width = 30, textvariable = decimal).grid(column = 2, row = 2, sticky = W)
Run Code Online (Sandbox Code Playgroud)
......你正准备decimalView好None.这就是错误消息告诉您无法找到xview属性的原因None.
这不是Tkinter的一些奇怪的怪癖; 几乎Python中用于以任何方式改变对象的每个方法都会返回None(或者,有时,某些其他有用的值 - 但从不self),list.sort从而返回file.write.
只需将它写在两行上:构造Entry并分配给它decimalView,然后再将grid它分配给它.
除了具有工作代码的微小好处之外,您还将拥有更易读的代码,这些代码不会在StackOverflow或大多数文本编辑器的屏幕右侧滚动.