如何解决如何在PySimpleGUI中单击显示弹出窗口?
我正在尝试显示一个弹出窗口,该窗口将在用户选择一个项目后使用PySimple GUI调用显示API的结果,但是单击按钮时什么也没有显示。
import PySimpleGUI as sg
# import PySimpleGUIQt as sg
import os.path
import PIL.Image
import io
#import imutils
import requests
import base64
import json
import base64
from detect_face_video import main
"""
"""
plate='f'
def convert_to_bytes(file_or_bytes,resize=None):
'''
Will convert into bytes and optionally resize an image that is a file or a base64 bytes object.
Turns into PNG format in the process so that can be displayed by tkinter
:param file_or_bytes: either a string filename or a bytes base64 image object
:type file_or_bytes: (Union[str,bytes])
:param resize: optional new size
:type resize: (Tuple[int,int] or None)
:return: (bytes) a byte-string object
:rtype: (bytes)
'''
if isinstance(file_or_bytes,str):
img = PIL.Image.open(file_or_bytes)
else:
try:
img = PIL.Image.open(io.BytesIO(base64.b64decode(file_or_bytes)))
except Exception as e:
dataBytesIO = io.BytesIO(file_or_bytes)
img = PIL.Image.open(dataBytesIO)
cur_width,cur_height = img.size
if resize:
new_width,new_height = resize
scale = min(new_height/cur_height,new_width/cur_width)
img = img.resize((int(cur_width*scale),int(cur_height*scale)),PIL.Image.ANTIALIAS)
with io.BytesIO() as bio:
img.save(bio,format="PNG")
del img
return bio.getvalue()
def update_plate(filename):
SECRET_KEY = 'sk_ed3d203bf4c9a7c2910ec0c0'
with open(filename,'rb') as image_file:
img_base64 = base64.b64encode(image_file.read())
url = 'https://api.openalpr.com/v3/recognize_bytes?recognize_vehicle=1&country=us&secret_key=%s' % (SECRET_KEY)
r = requests.post(url,data = img_base64)
try:
global plate
plate=r.json()['results'][0]['plate'],global Brand
Brand= r.json()['results'][0]['vehicle']['make_model'][0]['name'],global Color
Color= r.json()['results'][0]['vehicle']['color'][0]['name'],print(plate)
except:
print ('error')
# --------------------------------- Define Layout ---------------------------------
# First the window layout...2 columns
sg.theme('Dark Blue 3')
left_col = [[sg.Text('Folder'),sg.In(size=(25,1),enable_events=True,key='-FOLDER-'),sg.Folderbrowse()],[sg.ListBox(values=[],size=(40,20),key='-FILE LIST-')],[sg.Text('Resize to'),sg.In(key='-W-',size=(5,1)),sg.In(key='-H-',1))],[sg.Button("Resize",button_color=("white","blue"),size=(6,1))]]
# For Now will only show the name of the file that was chosen
images_col = [[sg.Text('You choose from the list:')],[sg.Text(size=(40,key='-TOUT-')],[sg.Image(key='-IMAGE-')]]
# ----- Full layout -----
layout = [[sg.Column(left_col,element_justification='c'),sg.VSeperator(),sg.Column(images_col,element_justification='c')]]
# --------------------------------- Create Window ---------------------------------
window = sg.Window('Multiple Format Image Viewer',layout,resizable=True)
# ----- Run the Event Loop -----
# --------------------------------- Event Loop ---------------------------------
while True:
event,values = window.read()
if event in (sg.WIN_CLOSED,'Exit'):
break
if event == sg.WIN_CLOSED or event == 'Exit':
break
if event == '-FOLDER-': # Folder name was filled in,make a list of files in the folder
folder = values['-FOLDER-']
try:
file_list = os.listdir(folder) # get list of files in folder
except:
file_list = []
fnames = [f for f in file_list if os.path.isfile(
os.path.join(folder,f)) and f.lower().endswith((".png",".jpg","jpeg",".tiff",".bmp"))]
window['-FILE LIST-'].update(fnames)
if event == 'Resize':
window['-IMAGE-'].update(data=convert_to_bytes(filename,resize=new_size))
elif event == '-FILE LIST-': # A file was chosen from the listBox
try:
filename = os.path.join(values['-FOLDER-'],values['-FILE LIST-'][0])
window['-TOUT-'].update(filename)
if values['-W-'] and values['-H-']:
new_size = int(values['-W-']),int(values['-H-'])
else:
new_size = None
window['-IMAGE-'].update(data=convert_to_bytes(filename,resize=new_size))
main(filename)
update_plate(filename)
print(plate)
except Exception as E:
print(f'** Error {E} **')
pass # something weird happened making the full filename
# --------------------------------- Close & Exit ---------------------------------
window.close()
解决方法
在Popup调用中将顶部设置为顶部,为我创建了顶部窗口。只需添加
sg.Popup("license plate",plate,keep_on_top=True)
但是,如果您单击后面的窗口,因为它也位于顶部,因此它将覆盖您的弹出窗口。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。