Iron Python:下一个按钮 Winforms Picturebox
Iron Python: Next Button Winforms Picturebox
我正在使用 IronPython 创建一个 winforms 应用程序。
我想知道如何获得 'next' 按钮来将 PictureBox 中的图像更改为列表中的下一张图像。
应用程序弹出正常,但下一步按钮不会更改图像。
但是,出于测试目的,每次单击 'Next' 按钮时它都会打印索引的新值。
这是我的部分代码:
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())
请注意,我在这里创建了 class 的 pb
和 index
成员变量。 pb
因为它需要在 OnNext
和 index
中访问,因为您通常应该尽可能避免 global
变量。
在更复杂的情况下,例如:当 index
可以通过不同的方式更改而不仅仅是单击按钮时,您可能需要考虑将其更改为 property
并获得代码在 setter 方法中更改图像。还有其他替代方法,例如创建 OnValueChanged
回调
我正在使用 IronPython 创建一个 winforms 应用程序。
我想知道如何获得 'next' 按钮来将 PictureBox 中的图像更改为列表中的下一张图像。
应用程序弹出正常,但下一步按钮不会更改图像。 但是,出于测试目的,每次单击 'Next' 按钮时它都会打印索引的新值。
这是我的部分代码:
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())
请注意,我在这里创建了 class 的 pb
和 index
成员变量。 pb
因为它需要在 OnNext
和 index
中访问,因为您通常应该尽可能避免 global
变量。
在更复杂的情况下,例如:当 index
可以通过不同的方式更改而不仅仅是单击按钮时,您可能需要考虑将其更改为 property
并获得代码在 setter 方法中更改图像。还有其他替代方法,例如创建 OnValueChanged
回调