[英]tkinter GUI blacked out screen after PyInstaller
在我的腳本上使用 PyInstaller 后,包含 tk GUI,output GUI 將顯示黑屏。 但是,我所有的小部件都在工作。 當我嘗試 hover 鼠標在屏幕上並嘗試按下並與 GUI 交互時,它可以工作。
所以 GUI 工作得很好,但是屏幕變黑了,我什么也看不到。
知道如何以及為什么會發生這種情況嗎? 怎么修?
代碼:
#main.py
import tkinter as tk
from tkinter import ttk
from parse_currency import CurrencyData
from tkinter import messagebox as mb
from PIL import ImageTk, Image
import sys, os
root = tk.Tk()
root.title('Currency Converter')
root.geometry('380x400')
root.config(bg='#122738')
root.columnconfigure(0, weight=1)
root.rowconfigure(0, weight=1)
def resource_path(relative_path):
try:
base_path = sys._MEIPASS
except Exception:
base_path = os.path.abspath(".")
return os.path.join(base_path, relative_path)
data = CurrencyData()
img_btn = ImageTk.PhotoImage(Image.open(resource_path('img/again.png')))
again_btn = tk.Button(root, image=img_btn)
logo = ImageTk.PhotoImage(Image.open(resource_path('img/icon_s.png')))
img_convert = ImageTk.PhotoImage(Image.open(resource_path('img/convert.png')))
def build_app():
''' * The App's widgets * '''
#Titale
logo_l = tk.Label(
root,
image=logo
)
# From
from_l = tk.Label(
root,
text='From: ',
bg='#122738',
fg='#0090C5',
font=('Times New Roman', 20, 'bold'))
cur1 = tk.StringVar(value='Select currency')
from_cur = tk.OptionMenu(root, cur1, *data.currencies)
from_cur.config(bg='#122738', width=20)
# To
to_l = tk.Label(
root,
text='To: ',
bg='#122738',
fg='#0090C5',
font=('Times New Roman', 20, 'bold'))
cur2 = tk.StringVar(value='Select currency')
to_cur = tk.OptionMenu(root, cur2, *data.currencies)
to_cur.config(bg='#122738', width=20)
# Input
num = tk.StringVar()
num_e = tk.Entry(
root,
width=20,
)
# Convert
convert_btn = tk.Button(root, image=img_convert)
# Result
result_l = tk.Label(
root,
relief=tk.SUNKEN,
justify=tk.CENTER,
width=20,
bg='#f59abe',
fg='blue',
font=(
'Times New Roman',
20,
'bold'
)
)
''' * Widgets Management * '''
logo_l.grid(row=0, column=0, columnspan=3, pady=10)
from_l.grid(row=5, column=0, sticky='w')
from_cur.grid(row=5, column=2, columnspan=2, sticky='we', padx=10)
to_l.grid(row=6, column=0, sticky='w')
to_cur.grid(row=6, column=2, columnspan=2, sticky='we', padx=10)
num_e.grid(row=12, column=0, columnspan=3, pady=10)
convert_btn.grid(row=99, column=0, columnspan=3, pady=10)
result_l.grid(row=100, column=0, columnspan=3, pady=10)
''' * Logic and code * '''
def convert():
from_var = cur1.get()
to_var = cur2.get()
try:
amount = float(num_e.get())
from_index = data.currencies.index(from_var)
to_index = data.currencies.index(to_var)
d = amount*data.to_usd[from_index]
r = d*data.from_usd[to_index]
if from_index == 0:
r=amount*data.from_usd[to_index]
if to_index == 0:
r=amount*data.to_usd[from_index]
result_l.config(text=round(r, 2))
except:
mb.showerror(
title='Invalid Input!',
message='Please select your currencies.\nOr enter a valid value.')
convert_btn.config(command=convert)
def rebuild():
data.__init__()
again_btn.grid_forget()
check()
again_btn.config(command=rebuild)
def check():
if data.connect:
build_app()
else:
mb.showerror(
title='Failed to connect!',
message='Could NOT connect to x-rates.com\nCheck internet connection!')
again_btn.grid()
check()
root.mainloop()
import requests
from bs4 import BeautifulSoup as bs
class CurrencyData:
def __init__(self):
self.connect = True
try:
source = requests.get('https://www.x-rates.com/table/?from=USD&amount=1').text
except:
self.connect = False
if self.connect:
soup = bs(source, 'lxml')
table = soup.find_all('tbody')
mini_data = table[1].find_all('tr')
self.currencies = ['US Dollar']
from_usd_str = ['1']
to_usd_str = ['1']
for currency in mini_data:
self.currencies.append(currency.td.text)
rates = currency.find_all('a')
from_usd_str.append(rates[0].text)
to_usd_str.append(rates[1].text)
self.from_usd = [float(x) for x in from_usd_str]
self.to_usd = [float(i) for i in to_usd_str]
來自 pyinstaller github 問題: https://github.com/pyinstaller/pyinstaller/issues/5827
您可以使用 pyinstaller 的這個分支: https://github.com/rokm/pyinstaller/tree/macos_sdk_11_to_darwin20
通過克隆和運行安裝
sudo python setup.py install
然后相應地使用 pyinstaller
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.