来自sql查询的Python tkinter按钮

2024-09-30 00:23:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python完全不熟悉,我试图对下面的问题保持清醒的头脑。 我需要从sql查询创建按钮。 现在一个按钮看起来像这样(我跳过样式)

def __init__ (self, screen):

    self.frame = Frame(screen)
    self.frame.grid()            
    self.button01Image = PhotoImage(file=row[2])
    self.button01 = Button(
        self.frame,
        image = self.button01Image,
        command = self.button01Activate,
        )
    self.button01.grid(row = 0, column = 0)


    def button01Activate(self):
        self.button01.configure(
            state = DISABLED
            )
        dosomething(23)
        dosomething(01)

sql查询的结果(行)如下所示

('01', '23', 'picturefilename.png' ,'0')

最后我想要这样的东西,是的,我知道它不起作用。你知道吗

def __init__ (self, screen):

    self.frame = Frame(screen)
    self.frame.grid()            
    self.button + row[0] Image = PhotoImage(file=row[2])
    self.button + row[0]  = Button(
        self.frame,
        image = self.button01Image,
        command = self.button01Activate,
        )
    if row[3] == 0
        self.button + row[0] + .configure(
            state = DISABLED
            )
    #counting up to a 3x5 grid)
    self.button + row[0] + .grid(row = 0, column = 0)


    def button + row[0] + Activate(self):
        self.button + row[0] + .configure(
            state = DISABLED
            )
        dosomething(row[1])
        dosomethingelse(row[0])

所以基本上我需要从数据库中为按钮分配函数和图片。你知道吗

我不知道从哪里开始改变,我想我的方法是完全错误的。 有人能给我指出正确的方向吗?你知道吗


Tags: selfconfiguredefbuttonscreen按钮framegrid
1条回答
网友
1楼 · 发布于 2024-09-30 00:23:28

你必须通过闭包构造Activate函数。你知道吗

我已经用文本替换了示例中的图像。看看评论就知道了。你知道吗

#!/usr/bin/env python3
import tkinter as tk

class CreateButtons:
    def __init__ (self, screen, sqlresult):

        self.frame = tk.Frame(screen)
        self.frame.grid()
        self.buttons = {}
        for i,row in enumerate(sqlresult):
            #buttonImage = PhotoImage(file=row[2])
            buttonId = row[0]
            button = tk.Button(
              self.frame,
              text = 'button-'+str(buttonId)
              #image = buttonImage
            )
            button['command'] = self.createButtonCommand(buttonId, row[1])
            self.buttons[buttonId] = button
            if row[3] == 0:
                button.configure(state = tk.DISABLED)
            #counting up to a 3x5 grid)
            button.grid(row = i//5, column = i%5)

    def createButtonCommand(self, buttonId, buttonArg):
        def command():
            self.buttonActivate(buttonId, buttonArg)
        return command

    def buttonActivate(self, buttonId, buttonArg):
        button = self.buttons.get(buttonId)
        if not button: return
        button.configure(state = tk.DISABLED)
        print("Button Pressed:", buttonId)
        #dosomething(buttonArg)
        #dosomethingelse(buttonId)


sqlresult = [(0,1,'pict1.png',1),(4,6,'pict2.png',0),(10,11,'pict3.png',1)]
root = tk.Tk()
CreateButtons(root, sqlresult)
root.mainloop()

相关问题 更多 >

    热门问题