【问题标题】:Best Python UI Framework for simple display (no direct interaction)用于简单显示的最佳 Python GUI 框架(无直接交互)
【发布时间】:2020-02-08 07:56:57
【问题描述】:

TL;DR
如何创建一个简单的“UI”来显示一些图片(“live feed”)并更新一些滑块来显示应用程序的状态。基本上,如何告诉 UI:“显示这个新图像而不是当前图像”和“突出显示这个不可点击的按钮以显示它已激活”。


我在用户界面和图形显示方面的经验绝对为零,所以我不知道该用什么谷歌来回答这个问题。我有一些使用树莓派相机拍照的python代码,对它们进行一些处理(过滤器),就是这样。我还有一些硬件组件(按钮、操纵杆)来控制相机和应用于图片的处理,例如滤镜选择和滤镜强度。硬件事件已经通过轮询按钮/操纵杆控制器的主循环进行处理。该循环还捕获图片并处理它们。基本上,申请就完成了。

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

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

谢谢!

【问题讨论】:

  • 要求图书馆推荐对于 stackoverflow 来说是题外话。

标签: python user-interface view frameworks display


【解决方案1】:

我真的很喜欢 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)

我希望这可以帮助您完成所需的工作。任何问题都可以发短信。

【讨论】:

  • 我最终使用了 PySimplyGUI,它基本上是 tkinter 的包装器。它易于使用,让我轻松控制主循环。
猜你喜欢
  • 1970-01-01
  • 2012-10-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多