【问题标题】:Inserting an image below sliders in wxPython在 wxPython 中的滑块下方插入图像
【发布时间】:2019-09-26 19:58:48
【问题描述】:

我想在 wxpython GUI 中的滑块下方有一个图像。文本询问“价值是什么?”我想在滑块下方显示一个值(例如 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 的任何文献或视频也将不胜感激。

【问题讨论】:

    标签: python image user-interface wxpython


    【解决方案1】:

    只需将图像添加到面板中所需位置或开始使用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()
    

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

    【讨论】:

    • 我不知道有一个静态图像功能可以做到这一点。谢谢!如果我想包含一张马的图片或不是由 PIL 创建的东西,这将如何工作?您是否只使用图像的文件路径作为 temp_image?
    • 评论必须有 >15 个字符作为答案Yes 的前言,尽管 35 匹马的图像可能看起来有点奇怪。 ;)
    • 编辑代码以根据滑块值更改图像。
    猜你喜欢
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 2019-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    相关资源
    最近更新 更多