在 wxPython 中的滑块下方插入图像

Inserting an image below sliders in wxPython

我想在 wxpython GUI 中的滑块下方有一个图像。文本询问 "What is the value?",我想在滑块下方显示一个值(例如 35)的图片,并在您浏览时显示不同的图像。

我研究过这个问题,但只找到了使图像成为整个背景的方法,而不是出现在面板中。

import wx

class MyPanel(wx.Panel):
    def __init__(self, parent, id):
        wx.Panel.__init__(self, parent, id)
        self.SetBackgroundColour("white")
        text1 = wx.StaticText(self, -1, "What is the value", (10,10))
        self.slider1 = wx.Slider(self, -1, 50, 0, 100, (10, 40), (200, 50),
            wx.SL_HORIZONTAL | wx.SL_AUTOTICKS | wx.SL_LABELS)
        self.Bind(wx.EVT_SLIDER, self.sliderUpdate)

    def sliderUpdate(self, event):
        self.pos1 = self.slider1.GetValue()
        if self.pos1 == 35:
            box = wx.MessageDialog(None, "BINGO!", "Title", wx.OK)
            box.ShowModal()

app = wx.App()
frame = wx.Frame(None, -1, "Title", size = (400, 310))
MyPanel(frame,-1)
frame.Show(True)
app.MainLoop()

另外,我不确定如何创建多个页面来切换底部的图片,并有一个提交按钮来检查它是否正确,然后再继续。

任何你能指出我更好地学习 wxpython 的文献或视频也将不胜感激。

只需将图像添加到面板所需位置或开始使用 sizers
我已经添加了一些快速 PIL 代码来生成数字或文本的图像,以便您可以在需要时即时生成图像,尽管我将其保留为单个全局实例。你可能想让它成为一个函数。

import wx
from PIL import Image, ImageDraw
temp_img=[]
for i in range(101):
    img = Image.new('RGB', (100,30))
    d = ImageDraw.Draw(img)
    d.text((10,10), str(i))
    width, height = img.size
    temp_img.append(wx.Bitmap.FromBuffer(width, height, img.tobytes()))

class MyPanel(wx.Panel):
    def __init__(self, parent, id):
        wx.Panel.__init__(self, parent, id)
        self.SetBackgroundColour("white")
        text1 = wx.StaticText(self, -1, "What is the value", (10,10))
        self.slider1 = wx.Slider(self, -1, 50, 0, 100, (10, 40), (200, 50),
            wx.SL_HORIZONTAL | wx.SL_AUTOTICKS | wx.SL_LABELS)
        self.bmp = wx.StaticBitmap(self, -1, bitmap=temp_img[50], pos=(10,100))
        self.Bind(wx.EVT_SLIDER, self.sliderUpdate)

    def sliderUpdate(self, event):
        self.pos1 = self.slider1.GetValue()
        self.bmp.SetBitmap(temp_img[self.pos1])
        if self.pos1 == 35:
            box = wx.MessageDialog(None, "BINGO 35!", "Title", wx.OK)
            box.ShowModal()

app = wx.App()
frame = wx.Frame(None, -1, "Title", size = (400, 310))
MyPanel(frame,-1)
frame.Show(True)
app.MainLoop()

编辑为根据滑块值显示多个图像。