【发布时间】:2018-08-09 03:16:06
【问题描述】:
为了清楚起见,我编辑了这篇文章。我想使用一个类从列表中生成按钮。在当前脚本中,我没有使用列表,我只是用变量 app1 实例化类,然后全屏显示:
如果我取消注释 list = [1,2,3],并取消注释 def button(): 函数,我会得到一个空白屏幕。我怀疑使用“Place Buttons Grid”布局时按钮会相互重叠,所以我制作了一个“Place Buttons Fill”布局用于测试。
我的最终目标是生成一个如下所示的 GUI:
但我知道我没有正确引用该类。我该怎么做?
import tkinter as tk
from tkinter import font
from tkinter import *
class alertButton(object):
def __init__(self, Canvas):
self.canvas=Canvas
myFont = font.Font(family='Helvetica', size=36, weight='bold')
#Configure Buttons
self.alertButton = Button(Canvas,text="Button 1",font=myFont, command=self.alertCycle, height=2, width=6)
self.quitButton = Button(canvas,text="Quit",font=myFont, command=canvas.quit, height=2, width=6)
#Place Buttons Pack
#self.alertButton.pack(padx=25, ipady=15, side=LEFT) # Pack from right to left
#self.quitButton.pack(padx=25, ipady=15, side=LEFT)
##This quit button only exists to exit full screen. Will remove later
#Place Buttons Grid
self.alertButton.grid(row=0,column=0,padx=20)
self.quitButton.grid(row=0,column=1,padx=20)
##This quit button only exists to exit full screen. Will remove later
def alertCycle(self):
print("Button Pressed")
#print (alertButton.i)
return
#list = [1,2,3]
#def button():
# for i in range(list):
# app[i]=alertButton(canvas)
root = tk.Tk()
root.title("Sensor GUI")
root.wm_attributes('-fullscreen', 'true')
canvas = tk.Canvas(root, bd=0, highlightthickness=0)
canvas.pack(fill=BOTH, expand=1)
app1 = alertButton(canvas)
root.mainloop()
【问题讨论】:
-
你能把它变成一个我们可以实际运行的minimal reproducible example吗?如果我删除所有明显的语法错误和对我没有的目录中的图像文件的引用,我得到的是大约 8 个高而窄的按钮,分布在屏幕上。没有 20 个(或 40 个)的唯一原因是,您无法在 700 像素宽的画布中放置这么多具有 25 像素填充的按钮。因此,如果您没有看到相同的内容,那么您的实际代码和我通过尝试修复您粘贴的非运行代码得到的代码之间可能存在一些不同。
-
另外,
def button行没有被评论,所以我不明白你取消评论是什么意思。 (如果你评论它,你只会得到一个NameError并且程序退出......) -
@abarnert 我更改了代码以使其正常工作。我认为我的“网格”放置会导致新按钮彼此重叠,所以我将“包装”放置部分留在里面并注释掉。我不知道如何引用该类来生成多个按钮。我犯了哪些语法错误,您更改为生成多个又高又窄的按钮?如果我能越过那个障碍,我就能弄清楚按钮的排列方式。我使用带有 list = [1,2,3] 的注释按钮()函数的方式是正确的方向吗?我想稍后用 JSON 填充我的按钮。