[Tutor PyCZ] dají se nějak vložit výběry z OptionMenu jako položky do seznamu?

Roman Miklos RMiklos na pss.sk
Úterý Říjen 31 17:53:19 CET 2006


Funkcia pouzita v command  OptionMenu musi mat zrejme vzdy definovany 
jeden argument  aj ked ho nepotrebujes.
Za 1.argumnent dosadi polozku vybranu z OptionMenu, teda vlastne 
promenna.get()

----------------------------------- code 
-----------------------------------------
# -*- coding: cp1250 -*- 
from Tkinter import *

def foo(bar):
    print "bar=%s" % bar
    print u"hodnota je:", promenna.get()
    seznam[0]=promenna.get()
    print seznam
 
okno = Tk()

seznam=['','','','']

promenna = StringVar(okno)  # tkinterovská proměnná
promenna.set(u"jedna")      # počáteční hodnota
option = OptionMenu(okno, promenna, u"jedna", u"dva", u"tři", u"čtyři", 
command=foo)
option.pack()

mainloop()
----------------------------------- code 
-----------------------------------------


Zistil som, ze ked jej odovzdam este 2.argument t.j. takto 
  def foo(bar, j)
robi to problemy. 

Takze skus ju oklamat tak, ze index j jej odovzdas pomimo ako globalnu 
premennu.
Tu je demo:
----------------------------------- code 
-----------------------------------------
# -*- coding: cp1250 -*- 
from Tkinter import *

class MyClass:
  def __init__(self):
    self.seznam=['','','','']
 
  def foo(self, bar):
    print self
    print u"hodnota je:", self.promenna.get()
    self.seznam[self.j] = self.promenna.get()
    print self.seznam

  def run(self):
    okno = Tk()
    self.promenna = StringVar(okno)  # tkinterovská proměnná
    self.promenna.set(u"dva")      # počáteční hodnota
    self.j=1
    option = OptionMenu(okno, self.promenna, u"jedna", u"dva", u"tři", 
command=self.foo)
    option.pack()
    okno.mainloop()

if __name__ == "__main__":
  mc = MyClass() 
  mc.run() 
  print mc.seznam
----------------------------------- code 
-----------------------------------------

Zamerne som pouzil OO. Tkinter je OO a tym ze robis s objektami sa vyhnes 
mnohym komplikaciam
index j listu seznam tu je atribut objektu, teda akasi globalna premenna 
instancie mc triedy MyClass 

Teraz ked budes chciet ukladat do 0.polozky zoznamu urobis:
 self.j=0
 option = OptionMenu(okno, self.promenna, u"jedna", u"dva", u"tři", 
command=self.foo)
ked do 1. polozky:
 self.j=1
 option = OptionMenu(okno, self.promenna, u"jedna", u"dva", u"tři", 
command=self.foo)
...
atd




"Jan Šimůnek" <jsim na med.muni.cz> 
Sent by: tutor-bounces na py.cz
31.10.2006 15:49
Please respond to
Konference Tutor portalu PyCZ <tutor na py.cz>


To
tutor na py.cz
cc

Subject
[Tutor PyCZ] dají se nějak vložit výběry z OptionMenu jako položky do 
seznamu?






Omlouvám se převelice, ale nepomohlo to
funkce ok:
def ok(hodnota):
    u"Volaná funkce při změně hodnoty udělátka 'option'"
    print u"hodnota je:", promenna.get(), hodnota
    seznam.append(promenna.get())
    print seznam
nějak záhadně (protože ji nejde volat s argumentem - nebo více argumenty) 
převezme vybranou hodnotu z OptionMenu a přidá ji na konec seznamu
Já bych potřeboval, aby byla změněna určitá konkrétní položka seznamu.
Dá se napsat:
    seznam[1]=promenna.get()
ale nedokážu přijít na to,  jak funkci ok předat ještě další hodnotu, aby 
ji 
jedno udělátko volalo, že chce uložit hodnotu na seznam[0], další na 
seznam[1] atd. Případně jak z udělátka změnit hodnotu nějaké globální 
proměnné (coby umístění v seznamu), kterou by si funkce ok nabrala 
příkazem 
global.

Děkuji
Jan Šimůnek
_______________________________________________
Tutor mailing list
Tutor na py.cz
http://www.py.cz/mailman/listinfo/tutor


Mgr. Ing. Roman MIKLÓŠ 
Prvá stavebná sporiteľňa a.s. 
Bajkalská 30, P. O. Box 48 
829 48  Bratislava 25 
Tel.: +421/ 2 / 582 31 174 
Fax: +421/ 2 / 582 31 109 



Další informace o konferenci Tutor