如何在没有类的情况下创建此函数 - Python 3 Tkinter

时间:2017-12-08 21:22:25

标签: python

from tkinter import *
class App():
    def __init__(self, root):
        self.root = root

    def Function(self):
        self.grid = []
        for i in range(7):
            row = []
            for j in range(6):
                row.append(Button(self.root,width=2,height=1,command=lambda i=i, j=j: self.Click1(i, j)))
                row[-1].grid(row=i,column=j)
            self.grid.append(row)

    def Click1(self, i, j):
        self.grid[i][j]["bg"]="blue"

root = Tk()
app = App(root)
app.Function()
root.mainloop()

我需要这个没有上课的功能。我尝试删除类选项,但我认为这将导致其他一切的链式效果。请帮我删除课程并保留方法。

1 个答案:

答案 0 :(得分:0)

嗯,你可以这样做,但我建议你不要这样做。但首先,一个可能的解决方案。这是基于我开始使用的东西:而不是类,你使用一个运行循环的主函数,并将所有方法作为子定义。外部函数包装器是可选的,但非常有用。它会在GUI退出时清除GUI创建的所有变量。此外,它允许您安全地导入脚本,并仅在需要时启动它。

def App():
    root = tk.Tk()
    #app = App(root)

    def Function():
        grid = []
        for i in range(7):
            row = []
            for j in range(6):
                row.append(ttk.Button(root,command=lambda i=i, j=j: Click1(i, j)))
                row[-1].grid(row=i,column=j)
            grid.append(row)

        return grid

    grid = Function()

    def Click1(i, j):
        grid[i][j]["bg"]="blue"

    root.mainloop()

App()

一些关键点:

  • 此脚本实际上并不起作用。由于它无法识别的事物(例如"身高"和宽度"),它会抛出大量异常。我猜你的版本与我的版本有什么不同?不过,它创建了一个按钮网格,这是我想的第一步。

  • 所有selfs必须继续,因为您不再使用课程

  • 所有方法,现在是subdef,必须返回他们应该创建或使用全局变量的变量,因为self.something不再可用。

现在,来自最初以这种风格构建GUI的人的一些建议:不要!为了您自己的利益。

  • 随着它的发展,它变得越来越难以管理和扩展,尤其是调试和简单阅读。

  • 如果您计划从其他地方导入您的作品,它可能无法与其他脚本一起使用。

  • 当你最终放弃并接受课程时,就像我一样,将你创建的所有内容(后面)翻译成课程将会非常繁琐。

使用tkinter可以使用类。