将数据从数据库链接到按钮 tkinter

时间:2021-07-08 14:17:58

标签: python database tkinter button

我正在开发一个关于 tkinter python 的项目。

这是我的图形界面的样子:

enter image description here

我有这个database.txt:

ChickenCurry,Rice,Curry,Chicken,0.ppm
ChocolateCake,Chocolate,Flour,Sugar,Eggs,1.ppm
BolognesePasta,Pasta,Beef,TomatoeSauce,Cheese,2.ppm

其实很简单。 0.ppm、1.ppm、2.ppm是3张图片的名称,第一个是咖喱鸡的图片,第二个是巧克力的图片,最后一个是肉酱面的图片。

我的项目:我想在我点击按钮 ChickenCurry 时显示鸡肉菜肴的图像,当我点击巧克力蛋糕时显示巧克力蛋糕的图像等。 ..

这是我的代码:

import sys
from tkinter import *
import tkinter as tk
from PIL import Image

class Application(tk.Frame):
    x = 2

def __init__(self, param = None, i = None, master=None):
    super().__init__(master)
    self.master = master
    self.pack()
    self.create_widgets()
    
    
def create_widgets(self):
    

    if (self.x == 2):
        param = "coucou"
    self.hi_there = tk.Label(self)
    self.hi_there["text"] = param
    #self.hi_there["command"] = self.say_hi
    self.hi_there.pack(side="top")

    self.quit = tk.Button(self, text="QUIT", fg="red",
                          command=self.master.destroy)
    self.quit.pack(side="bottom")
    
    # Opening file in read format
    File = open('data.txt',"r")
    if(File == None):
        print("File Not Found..")
    else:
        while(True):
            # extracting data from records 
            record = File.readline()
            if (record == ''): break
            data = record.split(',')
            print('Name of the dish:', data[0])
            self.hi_there = tk.Button(self)
            self.hi_there["text"] = data[0]
            self.hi_there["command"] = self.photoOfTheDish
            self.hi_there.pack(side="top")
            # printing each record's data in organised form
            for i in range(1, len(data)-1):
                print('Ingredients:',data[i])
                self.hi_there = tk.Label(self)
                self.hi_there["text"] = data[i]
                self.hi_there.pack(side="top")
    File.close()
    
def photoOfTheDish(self):
    novi = Toplevel()
    self.canvas = Canvas(novi, width = 1500, height = 1000)
    self.canvas.pack(expand = YES, fill = BOTH)
    File = open('data.txt',"r")
    with open('data.txt') as f:
        record = File.readline()
        data = record.split(',')
        gif1 = PhotoImage(file = data[-1].rstrip('\n'))
                                        #image not visual
        self.canvas.create_image(50, 10, image = gif1, anchor = NW)
        #assigned the gif1 to the canvas object
        self.canvas.gif1 = gif1

    
    

root = tk.Tk()
root.geometry("5000x2000")
app = Application(master=root)
app.mainloop()

我的问题是无论我点击什么按钮,它总是显示与“0.ppm”相对应的图像。我不知道如何将按钮链接到数据库中他的一组值。

1 个答案:

答案 0 :(得分:2)

photoOfTheDish() 中,您打开 data.txt 并仅读取第一行以获取图像文件名。因此,您总是会得到 0.ppm

您可以在创建按钮时使用 lambda 将图像文件名传递给 photoOfTheDish()

def create_widgets(self):
    ...
    else:
        while True:
            ...
            # extracting data from records
            record = File.readline().rstrip() # strip out the trailing newline
            ...
            # pass image filename to callback
            self.hi_there["command"] = lambda image=data[-1]: self.photoOfTheDish(image)
            ...
    ...

def photoOfTheDish(self, image):
    novi = Toplevel()
    self.canvas = Canvas(novi, width = 1500, height = 1000)
    self.canvas.pack(expand = YES, fill = BOTH)
    self.canvas.gif1 = PhotoImage(file=image)
    self.canvas.create_image(50, 10, image=self.canvas.gif1, anchor=NW)
相关问题