1

这是一个两部分的问题。一个愚蠢的技术查询和一个更广泛的查询,关于我学习用我不熟悉的语言做一些事情的可能错误的方法。

我只是在玩一些 Python GUI 库(主要是 wxPython 和 IronPython)来做一些我正在考虑在开源应用程序上做的工作,只是为了提高我的技能等等。

白天,我是一个非常标准的 c# 开发者,使用一组非常普通的基于 MS 的工具,我正在寻找 Python 来给我一个新的视角。因此使用 Ironpython Studio 可能有点作弊(好吧,很多)。这似乎无关紧要,因为无论它试图看起来像 Visual Studio 项目等。有一个简单的行为我可能太笨而无法实现。

IE 如何将我的表单保存在漂亮的单独代码文件中,就像我一直以来的 c# 猴子一样,但又相互调用它们?我已经尝试将要调用的表单导入到主表单中,但我似乎无法让表单被识别为对象以外的任何东西。新表单似乎是它自己的代码文件中的表单对象,我正在导入 clr。我正在尝试调用表单的“显示”方法。这不对吗?

我已经尝试了一些(在我看来不太可能)解决这个问题的方法,但这个问题似乎很棘手。这是我没有看到的东西,还是实际上更适合我改变我对 GUI 脚本的看法以适应 Python (在这种情况下,我可能会切换回 wxPython,这似乎从 Pythonic 更平易近人观点)而不是尝试从 Visual Studio shell 的安全性来看待 Python?

4

2 回答 2

1

我对这个问题并不完全清楚。您当然可以System.Windows.Forms.Form在 IronPython 的一个模块中定义一个子类,然后在其他模块中导入表单子类:

# in form.py
from System.Windows.Forms import Form, Button, MessageBox
class TrivialForm(Form):
   def __init__(self):
       button = Button(Parent=self, Text='Click!')
       button.Click += self.show_message

   def show_message(self, sender, args):
       MessageBox.Show('Stop that!')

# in main.py
import clr
clr.AddReference('System.Windows.Forms')
from System.Windows.Forms import Application
from form import TrivialForm
if __name__ == '__main__':
   f = TrivialForm()
   Application.Run(f)

IronPython Studio 的表单设计器/代码生成器是否不允许您这样构建代码?(我从未使用过它。)

于 2008-12-12T14:15:31.510 回答
0

最后,它变得更加简单。

我试图这样调用子表单:

f = frmSubform()
f.Show()

但我实际上需要这样做

f = frmSubform()
Form.Show(f)

Form.ShowDialog(f) 也有效;当然是对话格式。

一个足够简单的错误,但直到你知道你,好吧,不知道。

我不是 100% 确定我在这个阶段理解为什么什么有效,有效,但我相信我会从经验中学习。

于 2008-12-12T17:12:34.477 回答