import tkinter
from tkinter import ttk
def main():
root = tkinter.Tk()
numpad = NumPad(root)
root.mainloop()
numbers = [
'7', '8', '9',
'4', '5', '6',
'1', '2', '3']
class NumPad(ttk.Frame):
def __init__(self, root):
ttk.Frame.__init__(self, root)
self.grid()
self.num()
def num(self):
for c in range(1,4):
for r in range(3):
for b in numbers:
cmd = lambda b=b: print(b)
self.b= ttk.Button(self, text=b, command=cmd).grid(row = r, column = c, pady = 5)
#print(b)
main()
我遇到了这个代码的问题,因为当我尝试运行它时,所有按钮上只有3个,而唯一的输出是3.我试着看看我做错了什么,但仍然不能找到错误。它只选择“数字”功能中的最后一个数字。
感谢任何帮助。
答案 0 :(得分:3)
对于网格上的每个点,您将创建9个按钮并将其中一个放在另一个上面。只有最后一个按钮(对应于3的按钮)最终显示,并且每次都会显示。相反,您需要根据$('#myform').submit();
和c
找出索引并仅创建1个按钮:
r
答案 1 :(得分:1)
您在最后一个内部循环中覆盖self.b
。试试这个:
import tkinter
from tkinter import ttk
def main():
root = tkinter.Tk()
numpad = NumPad(root)
root.mainloop()
numbers = [
'7', '8', '9',
'4', '5', '6',
'1', '2', '3']
class NumPad(ttk.Frame):
def __init__(self, root):
ttk.Frame.__init__(self, root)
self.grid()
self.num()
def num(self):
for c in range(3):
for r in range(3):
text = numbers[c*3+r]
cmd = lambda text=text: print(text)
self.b= ttk.Button(self, text=text, command=cmd).grid(row = r, column = c, pady = 5)
main()
答案 2 :(得分:0)
使用numbers
zip
中的一个项目对齐
def num(self):
rc_gen = ((r, c) for r in range(3) for c in range(3))
for (r, c), num in zip(rc_gen, numbers):
cmd = lambda num=num: print(num)
self.b = ttk.Button(self, text=num, command=cmd).grid(row=r, column=c, pady=5)