使用dearpygui 版本1.8.0 来写一个bmp图片展示窗(允许滚动条上下滚动查看大图片),另该点击展示窗中的图片的demo
时间: 2023-05-26 22:04:38 浏览: 40
以下是使用DearPyGUI版本1.8.0编写的BMP图片展示窗口和点击展示窗口中图片的演示代码:
```python
import dearpygui.dearpygui as dpg
import cv2
# 加载BMP图片并将其转换为RGBA格式
def load_bmp_image(filename):
image_data = cv2.imread(filename, cv2.IMREAD_UNCHANGED)
if image_data.shape[2] == 3: # 如果是RGB格式的
image_data = cv2.cvtColor(image_data, cv2.COLOR_RGB2RGBA)
return image_data
# 显示BMP图片的窗口
def show_bmp_window():
with dpg.window(label="BMP Image Viewer", width=640, height=480):
dpg.add_image("image", value=[0, 0, 0], width=640, height=480)
# 加载并显示BMP图片
def load_bmp_image_and_show(filename):
image_data = load_bmp_image(filename)
dpg.set_item_width("image", image_data.shape[1])
dpg.set_item_height("image", image_data.shape[0])
dpg.set_value("image", image_data)
# 在点击窗口中展示被点击的BMP图片
def show_clicked_image(sender, app_data, user_data):
filename = app_data
load_bmp_image_and_show(filename)
# 创建一个滚动条并返回其ID
def create_scrollbar(max_value, callback):
with dpg.group(horizontal=True):
dpg.add_same_line()
scrollbar_id = dpg.add_slider_float("scrollbar", max_value=max_value, width=-16, callback=callback)
dpg.set_slider_float_pos("scrollbar", 0.0)
dpg.add_same_line()
dpg.add_text("/{}".format(max_value))
return scrollbar_id
# 打开文件选择对话框并显示选择的BMP图片
def open_file_dialog_and_show_bmp_image(sender, app_data, user_data):
if dpg.does_item_exist("scrollbar"):
dpg.delete_item("scrollbar")
result = dpg.file_dialog()
if not result:
return
filename = result[0]
image_data = load_bmp_image(filename)
# 如果图片太大,则创建滚动条
max_scroll_pos = image_data.shape[0] - 480
if max_scroll_pos > 0:
scrollbar_id = create_scrollbar(max_scroll_pos, lambda *_: dpg.set_value("image", dpg.get_value("image")))
@dpg.callback(dpg.mvButton, button=dpg.mvMouseButton_Left, mouse_pos=lambda: dpg.get_cursor_pos()[1])
def on_scroll_area_click(sender, app_data, user_data):
if dpg.get_item_rect_max(sender)[1] > dpg.get_cursor_pos()[1]:
dpg.set_value(scrollbar_id, dpg.get_value(scrollbar_id) - 10)
else:
dpg.set_value(scrollbar_id, dpg.get_value(scrollbar_id) + 10)
dpg.add_button(name="scroll_area", label="", width=640, height=480, callback=on_scroll_area_click)
else:
dpg.add_button(name="scroll_area", label="", width=640, height=480)
# 将图片数据赋值给展示窗口中的图片控件
dpg.set_value("image", image_data)
# 检查是否需要创建点击窗口
if not dpg.does_item_exist("click_window"):
dpg.add_window(name="click_window", width=200, height=100, label="Clicked Image")
dpg.set_primary_window("click_window", True)
dpg.set_item_callback("image", show_clicked_image, filename)
# 创建主窗口
with dpg.window(label="BMP Image Viewer", width=640, height=540):
dpg.add_button(name="open_file_button", label="Open BMP Image", callback=open_file_dialog_and_show_bmp_image)
# 创建展示窗口
show_bmp_window()
dpg.start_dearpygui()
```
该代码演示了如何在DearPyGUI中加载BMP图片并将其显示在窗口中,以及如何在点击时在新窗口中展示被点击的BMP图片。此外,如果图片太大,该程序会自动创建一个滚动条来允许用户滚动浏览图片。