这是一个两部分问题。一个愚蠢的技术查询和一个更广泛的询问,关于我可能有缺陷的方法来学习用我刚接触的语言做一些事情。
我正在玩一些Python GUI库(主要是wxPython和IronPython),我正在考虑在开源应用上做一些工作,只是为了提高我的技能等等。
白天我是一个非常标准的c#bod,使用一套非常正常的基于MS的工具,我正在看Python,给我一个新的视角。因此使用Ironpython Studio可能有点作弊(好吧,很多)。这似乎并不重要,因为它试图看起来像Visual Studio项目等。但有一个简单的行为我可能实施起来太愚蠢了。
即。如何将表单保存在漂亮的单独代码文件中,比如我一直以来的c#monkey,然后互相调用它们?我已经尝试将要调用的表单导入到主窗体中,但我似乎无法将窗体识别为除对象之外的任何其他内容。新表单似乎是自己的代码文件中的表单对象,我正在导入clr。我正在尝试调用表单的“显示”方法。这不对吗?
我尝试了一些(在我看来更不可能)解决这个问题的方法,但这个问题似乎难以解决。这是我刚刚没有看到的东西,或者实际上它更适合我改变我认为我的GUI脚本适合Python的方式(在这种情况下我可以切换回wxPython,这似乎更接近Pythonic观点)而不是试图从Visual Studio shell的安全性看Python?
答案 0 :(得分:1)
我对这个问题并不完全清楚。您当然可以在一个模块中在IronPython中定义System.Windows.Forms.Form
的子类,然后在其他模块中导入表单子类:
# 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的表单设计器/代码生成器是不是会让你像这样构建你的代码? (我从未使用它。)
答案 1 :(得分:0)
最后它更简单。
我试图调用子表单:
f = frmSubform()
f.Show()
但实际上我需要这样做
f = frmSubform()
Form.Show(F)
Form.ShowDialog(f)也有效;当然是以对话格式。
一个简单的错误,但直到你认识你,好吧,不知道。
我不是百分百肯定我在这个阶段理解为什么有效,有效,但我相信我会以经验学习。