[英]QRCode displaying in tkinter GUI python
我正在嘗試在tkinter GUI中顯示QR代碼,但是當我執行此代碼時:
import tkinter as tk
from PIL import Image,ImageTk
import pyqrcode
from tkinter.font import Font
import random
root=tk.Tk()
root.title("QR Lottery")
root.config(bg="white")
# Defining Fonts
TitleFont = Font(family="HEX:gon Staggered 2", size="48")
def generateQR():
num=random.randint(1,2)
if num==1:
QRCode=pyqrcode.create("You Win!")
QRCode.png("QRCode.png",scale=8)
img = Image.open('QRCode.png')
QRCodeImg = ImageTk.PhotoImage(img)
QRCodeLabel=tk.Label(image=QRCodeImg)
QRCodeLabel.grid(row=2,column=1)
else:
QRCode=pyqrcode.create("You Lose!")
QRCode.png("QRCode.png",scale=8)
img = Image.open('QRCode.png')
QRCodeImg = ImageTk.PhotoImage(img)
QRCodeLabel=tk.Label(image=QRCodeImg)
QRCodeLabel.grid(row=2,column=1)
#Labels
TitleLabel=tk.Label(text="qr lottery",bg="white",font=TitleFont)
TitleLabel.grid(row=1,column=1,columnspan=5)
ButtonQR=tk.Button(text="Generate!",bg="white",command=generateQR)
ButtonQR.grid(row=3,column=1)
root.mainloop()
生成的圖像標簽為空白方塊。 我不確定為什么會這樣,因為我將背景色留為空白。
問題 :生成的圖像標簽為空白方塊。 我不確定這是為什么
答 :您必須通過將圖像對象附加到另一個對象來保留對圖像對象的引用。
定義你自己的小工具QRCodeLabel
通過繼承tk.Label
。
僅使用參數parent
初始化
class QRCodeLabel(tk.Label): def __init__(self, parent, qr_data): super().__init__(parent) print('QRCodeLabel("{}")'.format(qr_data))
使用傳遞的qr_data
創建QRCode
並另存為PNG
文件。
qrcode = pyqrcode.create(qr_data) tmp_png_file = "QRCode.png" qrcode.png(tmp_png_file, scale=8)
從PNG
文件創建圖像對象。
Tkinter可以自己處理PNG
圖像文件,不需要PIL
。
注意 :您必須使用
self.image
來防止垃圾收集!
self.image = tk.PhotoImage(file=tmp_png_file)
使用self.image
配置此Label
self.configure(image=self.image)
用法 :
class App(tk.Tk): def __init__(self): super().__init__() buttonQR = tk.Button(text="Generate!", bg="white", command=self.generateQR) buttonQR.grid(row=2, column=0) self.qr_label = None def generateQR(self): if self.qr_label: self.qr_label.destroy() self.qr_label = QRCodeLabel(self, random.choice(["You Win!", "You Lose!"])) self.qr_label.grid(row=1, column=0) if __name__ == "__main__": App().mainloop()
使用Python測試:3.5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.