<p>您需要将数据收集与输出生成分开。想象一个独立的<code>ConfigBuilder</code>类,比如说,<code>telnet_port</code>,<code>ushare_iface</code>,<code>ushare_dir</code>属性和一个<code>build()</code>方法,它只返回一个生成的字符串blob。然后您的方法将只设置<code>builder</code>的字段:</p>
<pre><code>def on_servername_activate(self, widget):
servername = widget.get_text()
self.builder.ushare_name = servername
</code></pre>
<p>当用户单击提交按钮时,生成配置并将其写入文件:</p>
<pre><code>def on_commit_clicked(self, widget):
logfile = open('/home/boywithaxe/Desktop/ushare.conf','w')
logfile.write(self.builder.build())
</code></pre>
<p>如果您不想有一个单独的生成器类,您可以在字典中甚至窗口类的成员字段中收集输入数据:</p>
<pre><code>class MyApp(...):
ushare_name = None
... more fields to store user input
def can_build(self):
if self.ushare_name and
self.ushare_xxx and
self.ushare_yyy and
self.phase_of_moon_is_right():
return True
return False
def build_config(self):
return "BLAH =" + self.ushare_name + ...
def on_servername_activate(self, widget):
servername = widget.get_text()
self.ushare_name = servername
def on_commit_clicked(self, widget):
if self.can_build():
logfile = open('/home/boywithaxe/Desktop/ushare.conf','w')
logfile.write(self.build_config())
else:
display_some_warning_message("Data incomplete, the commit button should've been hidden/disabled so the user can't click until the app has all data it needs")
</code></pre>