我試圖用tkinter在python中創建一個二維碼生成的應用程式,你輸入顏色,然后輸入文本,它就會生成一個二維碼,但它在啟動時立即關閉。(當我沒有顏色部分時,問題沒有發生),(在未來,我還計劃添加一個保存QR為png的按鈕)。 以下是我所擁有的:
from tkinter import *
from tkinter import messagebox
import pyqrcode
from tkinter import colorchooser
import re
def choose_color():
x=0
# variable to store hexadecimal code of color.
color_code = colorchooser.askcolor(title ="選擇顏色")
print(color_code)
x = 1
root = Tk()
button = Button(root, text = "選擇顏色",
command = choose_color)
button.pack()
if 'x' == 1:
str = 'color_code' # Your Hex.
match = re.search(r'^#(?:[0-9a-fA-F]{3}){1,2}$', str)
if匹配。
print('hex is valid')
ws = Tk()
ws.title("PythonGuides")
ws.config(bg='color_code')
def generate_QR()。
if len(user_input.get())! =0 :
global qr,img
qr = pyqrcode.create(user_input.get() )
img = BitmapImage(data = qr.xbm(scale=8)
else:
messagebox.showwarning('warning', 'All Fields are Required!' )
try:
display_code()
except:
pass: display_code()
def display_code()。
img_lbl.config(image = img)
output.config(text="QR碼為" user_input.get())
lbl = Label(
ws,
text="輸入資訊或URL"。
bg='color_code'。
)
lbl.pack()
user_input = StringVar()
entry = Entry(
ws,
textvariable = user_input
)
entry.pack(padx=10)
button = Button(
ws,
text = "generate_QR",
width=15,
命令 = generate_QR
)
button.pack(pady=10)
img_lbl = Label(
ws,
bg='color_code')
img_lbl.pack()
output = Label(
ws,
text="",
bg='color_code')
)
output.pack()
ws.mainloop()
else:
print('hex is not valid')
uj5u.com熱心網友回復:
程式立即關閉的原因是沒有root.mainloop()/code>。即使有,還有很多其他的錯誤會阻止程式的運行。
。
第一個問題是if 'x' == 1。這里你正在比較字面字串 "x "和數字1。這些永遠不會相等,所以另一個視窗將永遠不會出現。我知道你想用x做什么,但它不會像你期望的那樣作業。最好的辦法是完全擺脫x,在用戶選擇顏色后呼叫一個函式。我把這個函式稱為show_qr_window。
第二個問題是你如何獲得十六進制代碼。你使用colorchooser.askcolor的輸出,它是一個元組,包含一個代表顏色的rgb元組和它的十六進制值。你只需要十六進制值,所以你需要color_code[1],因為十六進制值是第二個專案。我還添加了一個if陳述句以確保color_code不是無。如果用戶沒有選擇顏色,只是關閉了視窗,那么color_code將是無。如果用戶已經選擇了一種顏色,它將被傳遞給show_qr_window。因為我們已經檢查了用戶選擇的顏色,你可以擺脫所有其他的驗證,因為colorchooser將總是回傳一個有效的十六進制值。你也不再需要匯入re。
第三個問題是,你使用了Tk兩次。這將導致你的程式不能正常作業。相反,將ws = Tk()改為ws = Toplevel()。
下一個問題是str = 'color_code>。這不是你定義一個變數的方式。你要做的是color_code = 'a string'。在這種情況下,字串被傳遞給show_qr_window作為變數color,所以你可以使用color_code = color。你還必須將所有的bg = 'color_code'改為bg = color_code,因為color_code是一個變數,不是一個字串。
你的其他代碼似乎可以作業(我沒有測驗qr碼的生成,因為我沒有安裝那個模塊)。以下是所有修復后的代碼:
from tkinter import *
from tkinter import messagebox
import pyqrcode
from tkinter import colorchooser
def choose_color()。
# variable to store hexadecimal code of color.
color_code = colorchooser.askcolor(title ="選擇顏色")
if color_code != None:
show_qr_window(color_code[1] )
root = Tk()
button = Button(root, text = "選擇顏色",
command = choose_color)
button.pack()
root.mainloop()
def show_qr_window(color)。
ws = Toplevel()
color_code = color
ws.config(bg = color_code)
def generate_QR()。
if len(user_input.get())! =0 :
global qr,img
qr = pyqrcode.create(user_input.get() )
img = BitmapImage(data = qr.xbm(scale=8)
else:
messagebox.showwarning('warning', 'All Fields are Required!' )
try:
display_code()
except:
pass: display_code()
def display_code()。
global img
img_lbl.config(image = img)
output.config(text="QR碼為" user_input.get())
lbl = Label(
ws,
text="輸入資訊或URL"。
bg=color_code
)
lbl.pack()
user_input = StringVar()
entry = Entry(
ws,
textvariable = user_input
)
entry.pack(padx=10)
button = Button(
ws,
text = "generate_QR",
width=15,
命令 = generate_QR
)
button.pack(pady=10)
img_lbl = Label(
ws,
bg=color_code)
img_lbl.pack()
output = Label(
ws,
text=""。
bg=color_code
)
output.pack()
ws.mainloop()
假設generate_QR()和display_code()作業正常(我沒有測驗它們,但它們看起來不錯),這段代碼將按預期運行。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/330593.html
標籤:
上一篇:按鈕,將其文本改為檔案名
