最佳 Python UI 简单显示框架(无直接交互)

Best Python UI Framework for simple display (no direct interaction)

TL;DR
如何创建一个简单的 "UI" 来显示几张图片 ("live feed") 并更新一些滑块来显示应用程序的状态。基本上,如何分辨UI:"show this new image instead of the current one"和"highlight this unclickable button to show it is activated"。


我对用户界面和图形显示的经验完全为零,所以我不知道 google 这个问题。我有一些 python 代码使用 raspberry pi 相机拍照,对它们进行一些处理(滤镜),仅此而已。我还有一些硬件组件(按钮、操纵杆)来控制相机和应用于图片的处理,例如滤镜选择和滤镜强度。硬件事件已经通过轮询 buttons/joystick 控制器的主循环处理。该循环还捕获图片并对其进行处理。基本上申请就完成了。

现在,简单显示此信息的最佳方式是什么?实现此目标的最佳 Python 框架是什么?

PyQT 或 Kivy 允许我这样做吗?我想在一个简单可爱的布局中显示 "live feed",一些按钮信息(按下哪个按钮以显示当前对图片进行的处理)。界面上不需要任何可点击的东西,因为交互发生在硬件上。

谢谢!

我真的很喜欢 Tkinter 库来完成这些更简单的任务。如果您熟悉它,它与 java Swing 非常相似。这是一个示例代码,它几乎可以满足您的所有需求,尽管它非常混乱。不过应该能帮到你。

请注意,Tkinter 非常原始,不推荐用于更精细的需求。

import tkinter as tk
from PIL import ImageTk, Image
import time

#manipulating canvas items attributes
def change_color(canvas):
    if canvas.itemcget(label, 'fill') == 'black':
        canvas.itemconfig(label, fill='green')
    else:
        canvas.itemconfig(label, fill='black')

#changing image displayed
def change_image(canvas, current):
    if current == 1:
        canvas.itemconfig(img, image=photo2)
        return 2
    else:
        canvas.itemconfig(img, image=photo1)
        return 1

#slider gauge
def set_gauge(canvas, percentage):
    coords = canvas.coords(gaugefg)
    new_y = -2*percentage + 400
    coords[1] = new_y
    canvas.coords(gaugefg,coords)

color = 'black'
gauge = 0
delta = 10
root = tk.Tk()
#frame size and background
root.geometry('600x600')
root.configure(bg='white')
#make frame pop upfront
root.attributes("-topmost", True)

#uploading images from the same folder
photo1 = ImageTk.PhotoImage(Image.open('download.jpeg'))
photo2 = ImageTk.PhotoImage(Image.open('download1.jpeg'))
current_photo = 1

#canvas on with we'll be drawing
canvas = tk.Canvas(master=root, width=600, height=600)
#text label (xcenter,ycenter)
label = canvas.create_text(500, 500, text='Cool', fill=color, font=('purisa', 20))
#img component (xcenter, ycenter)
img = canvas.create_image(300, 300, image=photo1)
#gauge/slider = two superposed rectangles
#NOTE: (xtopleft, ytopleft, xbottomright, ybottomright)
gaugebg = canvas.create_rectangle(510, 200, 540, 400, fill='black')
gaugefg = canvas.create_rectangle(510, 300, 540, 400, fill='blue')
canvas.pack()

#Main Loop
while True:
    change_color(canvas)
    current_photo = change_image(canvas, current_photo)
    gauge += delta
    if gauge == 100 or gauge == 0:
        delta = -delta
    set_gauge(canvas, gauge)
    #update frame and canvas
    root.update()
    time.sleep(1)

希望对您有所帮助。任何问题只需发短信。