C# Iron Python:下一步按钮Winforms Picturebox

C# Iron Python:下一步按钮Winforms Picturebox,c#,winforms,ironpython,C#,Winforms,Ironpython,我正在使用IronPython创建一个winforms应用程序 我想知道如何使用“下一步”按钮将PictureBox中的图像更改为列表中的下一个图像 应用程序弹出良好,但“下一步”按钮不会更改图像。 但是,出于测试目的,每次单击“下一步”按钮时,它都会打印索引的新值 以下是我的部分代码: Images = [list, of, images] index = 0 class IForm(Form): def __init__(self): self.Text = 'P

我正在使用IronPython创建一个winforms应用程序

我想知道如何使用“下一步”按钮将PictureBox中的图像更改为列表中的下一个图像

应用程序弹出良好,但“下一步”按钮不会更改图像。 但是,出于测试目的,每次单击“下一步”按钮时,它都会打印索引的新值

以下是我的部分代码:

Images = [list, of, images]
index = 0
class IForm(Form):

    def __init__(self):

        self.Text = 'PictureBox'
        pb = PictureBox()
        pb.Parent = self
        pb.Size = Size(1200, 700)
        pb.Location = Point(2, 2)
        pb.Image = Image.FromFile(Images[index]) #should change the image when index is changed

        Next = Button()
        Next.Parent = self
        Next.Text = "Next >"
        Next.Location = Point(1125, 905)
        Next.Click += self.OnNext

        self.Size = Size(1220, 970)
        self.CenterToScreen()

    def OnNext(self, sender, event):  
        global index
        index += 1
        print index

Application.Run(IForm())

谢谢您的时间。

您遇到的问题是,
pb.Image=Image.FromFile(Images[index]
不会自动重新计算,因为
index
的值已更改。您必须手动执行此操作。在您的情况下,一个简单的解决方案可能是这样的

Images = [list, of, images]
class IForm(Form):

    def __init__(self):
        self.index = 0
        self.Text = 'PictureBox'
        self.pb = PictureBox()
        self.pb.Parent = self
        self.pb.Size = Size(1200, 700)
        self.pb.Location = Point(2, 2)
        self.pb.Image = Image.FromFile(Images[self.index]) 

        Next = Button()
        Next.Parent = self
        Next.Text = "Next >"
        Next.Location = Point(1125, 905)
        Next.Click += self.OnNext

        self.Size = Size(1220, 970)
        self.CenterToScreen()

    def OnNext(self, sender, event): 
        self.index += 1
        # update the image of the PictureBox
        self.pb.Image = Image.FromFile(Images[self.index])
        print self.index

Application.Run(IForm())
注意,我在这里创建了类的
pb
index
成员变量。
pb
是因为它需要在
OnNext
中访问,而
index
是因为您通常应该尽量避免使用
全局
变量


在更复杂的情况下,例如:当
索引
可以通过不同的方式更改而不仅仅是单击按钮时,您可能希望将其更改为
属性
,并在setter方法中使用更改图像的代码。还有其他替代方法,例如创建
OnValueChanged
callb谢谢!我会研究一下你提到的其他方法。