Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
显示网格的Python方式是什么?_Python_Tkinter - Fatal编程技术网

显示网格的Python方式是什么?

显示网格的Python方式是什么?,python,tkinter,Python,Tkinter,我正在学习Python,我想在网格中显示按钮。下面的代码生成的正是我想要的,但是通过增加x和y来显示按钮的代码看起来并不是很像python。(我有程序语言背景)有更好的方法吗?谢谢你的帮助 from tkinter import * from tkinter import ttk root = Tk() numberButtonsFrame = ttk.Frame(root) numberButtonsFrame.pack() button=[0] for i in range(1,10):

我正在学习Python,我想在网格中显示按钮。下面的代码生成的正是我想要的,但是通过增加x和y来显示按钮的代码看起来并不是很像python。(我有程序语言背景)有更好的方法吗?谢谢你的帮助

from tkinter import *
from tkinter import ttk
root = Tk()

numberButtonsFrame = ttk.Frame(root)
numberButtonsFrame.pack()
button=[0]
for i in range(1,10):
    button.append (ttk.Button(numberButtonsFrame, text = i))

x=0
y=0
for i in range(1,10):
    button[i].grid(row=x,column=y)
    y=y+1
    if y>2:
       x=x+1
       y=0    

root.mainloop()

处理网格时,解决方案通常是使用嵌套循环:

for row in in range(nrows):
  for col in range(ncolumns):
    buttons[row][col].grid(row=row, column=col) # You could also calculate a linear index if that's what you want
单回路 正如我在一篇评论(以及另一张海报)中所指出的,有一种方法可以基于
I
计算
col
umn(反之亦然)

您可以在创建每个按钮的同时执行此操作。您还可以使用列表简化按钮的创建

buttons = [ttk.Button(numberButtonsFrame, text = i) for i in range(1,10)]
我假设您在
按钮
(s)列表的开头添加了
0
,以移动索引:您不必这样做。只需在计算中将
1
添加到
i

最后,我建议使用命名良好的变量而不是文字(例如,
ncolumns
)。和
按钮
,而不是列表的
按钮
。我将以一个例子来结束(
/
是楼层划分-在
divmod
中的
div
):


处理网格时,解决方案通常是使用嵌套循环:

for row in in range(nrows):
  for col in range(ncolumns):
    buttons[row][col].grid(row=row, column=col) # You could also calculate a linear index if that's what you want
单回路 正如我在一篇评论(以及另一张海报)中所指出的,有一种方法可以基于
I
计算
col
umn(反之亦然)

您可以在创建每个按钮的同时执行此操作。您还可以使用列表简化按钮的创建

buttons = [ttk.Button(numberButtonsFrame, text = i) for i in range(1,10)]
我假设您在
按钮
(s)列表的开头添加了
0
,以移动索引:您不必这样做。只需在计算中将
1
添加到
i

最后,我建议使用命名良好的变量而不是文字(例如,
ncolumns
)。和
按钮
,而不是列表的
按钮
。我将以一个例子来结束(
/
是楼层划分-在
divmod
中的
div
):

使用
divmod()
函数计算索引中的每一行和每一列

buttons_per_row = 3
for i in range(9):
    button = ttk.Button(numberButtonsFrame, text = i+1)
    row, col = divmod(i, buttons_per_row)
    button.grid(row=row, column=col)
使用
divmod()
函数计算索引中的每一行和每一列

buttons_per_row = 3
for i in range(9):
    button = ttk.Button(numberButtonsFrame, text = i+1)
    row, col = divmod(i, buttons_per_row)
    button.grid(row=row, column=col)
另一种方法。。。 与其他方法一样,使用两个嵌套循环,您可以通过以下方法计算
中的文本:

(r*3)+c+1

显然,这将返回一个
int
,因此必须应用
str()
,从而得到更简洁的解决方案:

from tkinter import *
from tkinter import ttk
root = Tk()

numberButtonsFrame = ttk.Frame(root)
numberButtonsFrame.pack()

for r in range(3):
    for c in range(3):
        ttk.Button(numberButtonsFrame, text=(r * 3) + c + 1).grid(row=r, column=c)
        
root.mainloop()
另一种方法。。。 与其他方法一样,使用两个嵌套循环,您可以通过以下方法计算
中的文本:

(r*3)+c+1

显然,这将返回一个
int
,因此必须应用
str()
,从而得到更简洁的解决方案:

from tkinter import *
from tkinter import ttk
root = Tk()

numberButtonsFrame = ttk.Frame(root)
numberButtonsFrame.pack()

for r in range(3):
    for c in range(3):
        ttk.Button(numberButtonsFrame, text=(r * 3) + c + 1).grid(row=r, column=c)
        
root.mainloop()

您可以通过对按钮中的b执行
来改进第二个for循环:
因为您没有在循环中使用
i
…您可以通过对按钮中的b执行
来改进第二个for循环:
因为您没有在循环中使用
i
…一个人对我的回答评论说
str
转换是错误的隐式。是的,很抱歉,我一定错过了,我刚刚用我的例子检查了一下,它在tkinter中是不重要的:)使用计算的问题是,任何阅读此代码的人都可能必须解密计算在做什么,以确保它在做他们认为它在做的事情。当他们意识到你所做的只是数一数小部件的数量时,他们会挠头问你为什么不数一数,或者将小部件附加到列表中,并使用列表的长度。我明白你的观点,它的有效性是,对于不知道你在做什么的人来说,它可能不清楚,但它使用了行和列变量,因此不太难判断。另外,如果OP只是像我[here]()那样为自己编写一个程序,那么它很好,也更简洁……一个人在我的回答中评论说,
str
转换是隐式的。是的,很抱歉我一定错过了,我刚刚用我的例子检查了一下,它在tkinter中很重要:)使用计算的问题是,任何阅读这段代码的人都可能必须破译计算在做什么,以确保它在做他们认为它在做的事情。当他们意识到你所做的只是数一数小部件的数量时,他们会挠头问你为什么不数一数,或者将小部件附加到列表中,并使用列表的长度。我明白你的观点,它的有效性是,对于不知道你在做什么的人来说,它可能不清楚,但它使用了行和列变量,因此不太难判断。此外,如果OP只是像我(这里)那样为自己编写一个程序,那么它很好,而且更简洁。。。