Você está entendendo mal o significado da instrução global
no Python. Veja o que a documentação do Python diz:
The global statement ... means that the listed identifiers are to be interpreted as globals. It would be impossible to assign to a global variable without global, although free variables may refer to globals without being declared global.
Então, basicamente, você só precisa usar global blah
quando precisar atribuir a uma variável global chamada blah
. A variável, no entanto, já deveria existir no escopo global. Se você está apenas acessando uma variável global ou seus métodos (como determinado a atribuir a ela), não é necessário declará-la como global
.
Então, o que você precisa é algo como
output = None
def on_servername_insertatcursor(self, widget):
global output
output = StringIO.StringIO()
servername = widget.get_text()
output.write("USHARE_NAME="+servername+'\n')
def on_netif_changed(self, widget):
netif = widget.get_active_text()
output.write("USHARE_IFACE="+netif+'\n')
...
No entanto, toda a abordagem com o uso de uma variável global e tornando a coisa toda dependente da ordem das chamadas de função (on_servername_insertatcursor DEVE ser chamada primeiro, caso contrário, as outras funções falharão) não é uma boa prática de codificação.
UPDATE: Além disso, ocorreu-me que as funções que você está mostrando são de fato métodos de uma classe, certo? Nesse caso, você pode tornar output
um membro da classe e acessá-lo como self.output
:
class MyApp(gtk.Window):
output = None
def __init__(...):
...
self.output = StringIO.StringIO()
def on_servername_insertatcursor(self, widget):
servername = widget.get_text()
self.output.write("USHARE_NAME="+servername+'\n')
def on_netif_changed(self, widget):
netif = widget.get_active_text()
self.output.write("USHARE_IFACE="+netif+'\n')
Ainda assim, a saída do seu aplicativo depende do usuário do pedido clicar nos botões, o que não é legal. Por exemplo, se o usuário clicar na caixa de seleção "dlna" duas vezes, haverá duas linhas na configuração, o que presumo que não seja o que você deseja.