Hallo Liste, ich tüfftel gerade an einer mehrspaltigen Listbox. Aber leider nur mit mässigem Erfolg. Meine Frage: Gibt es eventuell ein Modul, eine Klasse dafür? Kennt jemand ein Beispiel? Ich möchte Datensätze anzeigen, darin scrollen und einzel markieren. Danke für jede Hilfe. Kann jede Anregung und ähnliche Beispiele gebrauchen. Grusz Mathias -- Lieber lachende Pinguine als tanzende Büroklammern! CU in www.meeloon.de -- _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On Friday 11 June 2004 10:59, Mathias Uebel wrote:
Hallo Liste, ich tüfftel gerade an einer mehrspaltigen Listbox. Aber leider nur mit mässigem Erfolg. Meine Frage: Gibt es eventuell ein Modul, eine Klasse dafür? Kennt jemand ein Beispiel? Ich möchte Datensätze anzeigen, darin scrollen und einzel markieren.
Du solltest erwaehnen, welches Toolkit du verwendest - in PyQt stehen wahlweise QTable oder QListview zur Verfuegung. MfG Diez _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Diez B. Roggisch wrote:
On Friday 11 June 2004 10:59, Mathias Uebel wrote:
Hallo Liste, ich tüfftel gerade an einer mehrspaltigen Listbox. Aber leider nur mit mässigem Erfolg. Meine Frage: Gibt es eventuell ein Modul, eine Klasse dafür? Kennt jemand ein Beispiel? Ich möchte Datensätze anzeigen, darin scrollen und einzel markieren.
Du solltest erwaehnen, welches Toolkit du verwendest - in PyQt stehen wahlweise QTable oder QListview zur Verfuegung.
Ja, natürlich ... tse tse ... Ich versuche mich in TKinter. Grusz Mathias -- Lieber lachende Pinguine als tanzende Büroklammern! CU in www.meeloon.de -- _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On Friday 11 June 2004 13:39, Mathias Uebel wrote:
Ja, natürlich ... tse tse ... Ich versuche mich in TKinter.
Damit ging das nur mit Umwegen - als ich noch mit tcl unterwegs war, hab ich sowas mal gemacht. Ob tix zB da mehr comfort bietet weiss ich nicht. Solltest mal googlen in die Richtung - also tk/tix/tcl, nix python. ich wuerde dir raten statt tk was anderes zu nehmen - ich selber schwoere auf qt, alleine der designer rechtfertigt das schon. Aber auch wxpython ist Lichtjahre weiter. Tk ist doch sehr rudimentaer, und an vielen Stellen sehr den paradigmen von tcl verhaftet - es programmiert sich in python nicht sehr gut. Ich hab's versucht und schnell sein gelassen :) MfG Diez _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Am Fri, Jun 11, 2004 um 14:02:46 CEST, diez b. roggisch schrieb:
ich wuerde dir raten statt tk was anderes zu nehmen - ich selber schwoere auf qt, alleine der designer rechtfertigt das schon. Aber auch wxpython ist Lichtjahre weiter. Tk ist doch sehr rudimentaer, und an vielen Stellen sehr den paradigmen von tcl verhaftet - es programmiert sich in python nicht sehr gut. Ich hab's versucht und schnell sein gelassen :)
Hallo, schön das mal dieses Thema angesprochen wird: Ich habe vor ca. 1 - 2 Jahren mal mit Qt unter C++ programmiert, allerdings habe ich noch nie Qt mit Python verwendet, deswegen gleich mal ne Frage: Was ist vom Programmieren her der unterschied? Sind die Methoden die selben wie bei C++? Wie stabil läuft die ganze sache? GTK+ (damals noch 1.2.8) habe ich auch mal Programmiert! Wie sieht es da mit dem API aus? Sind das große unterschiede zu dem "normalem" GTK+ interface? So viele Fragen, ich denke das reicht erstmal. Vielen Dank mfg Betz Stefan -- Junge: Ich bin 13 und habe jetzt Windows XP! Admin: Kannst du nicht lieber Drogen nehmen wie die anderen in deinem Alter! _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Diez B. Roggisch wrote:
On Friday 11 June 2004 13:39, Mathias Uebel wrote:
Ja, natürlich ... tse tse ... Ich versuche mich in TKinter.
[...] Tk ist doch sehr rudimentaer...
MfG Diez
Hallo Diez Danke für den Tip. Meine Bemühungen, das mit TK hinzubekommen, sind jetzt auch schon ein paar vergebliche Stunden lang. So werde ich wohl mein bisheriges Werk in Qt umwandeln. Alles andere scheint mich zu sehr aufzuhalten. Grusz Mathias -- Lieber lachende Pinguine als tanzende Büroklammern! CU in www.meeloon.de -- _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Hi, On Fri, 11 Jun 2004 14:56:52 +0200, Mathias Uebel <mathias.uebel@meeloon.de> wrote:
Meine Bemühungen, das mit TK hinzubekommen, sind jetzt auch schon ein paar vergebliche Stunden lang.
achso, und ich dachte schon, Du hast ein etwas grösseres Projekt vor und bist schon länger dran. Hat mich nämlich gewundert, das Du auf Grund einer Mail Deine Design-Entscheidung in Minuten über den Haufen geworfen hast.
Werk in Qt umwandeln. Alles andere scheint mich zu sehr aufzuhalten.
Ich habe QT noch nicht benutzt, bezweifel aber, das das damit nun alles "wie von selbst" geht. Falls Du Tk doch noch benutzen willst, hier ein paar Links: http://www.pythonware.com/library/tkinter/introduction/index.htm http://www.ferg.org/thinking_in_tkinter/index.html Tix ist in der neuesten Python-Version jetzt auch für Win enthalten (Linux wohl schon länger). Eventuell enthält Tix, was Du suchst. http://tix.sourceforge.net/ Und hier ein Anwendung in Tk und Python. Nur als Beispiel, das man auch mit Tk einiges machen kann: http://members.cox.net/bdivito/diagnil.html -- Mit freundlichen Grüßen Klaus Meyer :-) _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Ich habe QT noch nicht benutzt, bezweifel aber, das das damit nun alles "wie von selbst" geht.
Wie von selbst nicht - aber um Groessenordnungen einfacher schon. Mit dem designer und dem signal-slot-Konzept laesst sich hervorragend arbeiten. Es ist halt eine kommerzielle Loesung, die fuer Linux unter der GPL zur Verfuegung steht - das macht schon einen Unterschied. wxPy ist unter Portabilitaetsaspekten besser, weil qt unter Windows eben nicht frei ist. Wer auf letzteres nicht achten muss, faehrt mit qt auf jeden Fall sehr gut. gtk kenne ich garnicht - aber mit glade steht da wohl auch ein ui-designer zur Verfuegung. MfG Diez _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
gtk kenne ich garnicht - aber mit glade steht da wohl auch ein ui-designer zur Verfuegung.
Also ich finde Glade ziemlich gut, man kann dann die .glade datei einfach in das Python script "importieren". Aber es hat mich etwas Zeit gekostet hinter Glade zu steigen wegen den boxes und so _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Hallo, Zur ursprünglichen Frage (mehrspaltige Listbox in TKinter) hätte ich noch meine angepasste Version von MultiListbox.py anzubieten (s. Attachment). Schöne Grüße, Matthias begin 644 mhMultiListBox.py M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(PT*(PT*(R`@("!&:6QE.B`@("`@ M("!M:$UU;'1I3&ES=$)O>"YP>0T*(PT*(R`@("!0=7)P;W-E.B`@("!-=6QT M:2UC;VQU;6X@;&ES="!B;W@N("!!8W1S(&UO<W1L>2!L:6ME(&$@<F5G=6QA M<@T*(R`@("`@("`@("`@("`@("!T:VEN=&5R(&QI<W1B;W@@*R!S8W)O;&QB M87(L(&)U="!S=7!P;W)T<R!M=6QT:7!L90T*(R`@("`@("`@("`@("`@("!C M;VQU;6YS('=I=&@@:&5A9&EN9R!L86)E;',N#0HC#0HC("`@("`@("`@("`@ M("`@(&\@16YH86YC960@=F5R<VEO;B!O9B!-=6QT:4QI<W1";W@N<'D@8GD@ M0F]B($AA=6-K#0HC("`@("`@("`@("`@("`@("`@=VAI8V@@8V%N(&)E(&9O M=6YD(&%T(#QH='1P.B\O=W=W+FAA=6-K<RYO<F<O/@T*(R`@("`@("`@("`@ M("`@("!O($)A<V5D(&]N('=O<FL@8GD@0G)E;G0@0G5R;&5Y(&9O=6YD(&%T M.@T*(R`@("`@("`@("`@("`@("`@(#QH='1P.B\O87-P;BYA8W1I=F5S=&%T M92YC;VTO05-03B]0>71H;VXO0V]O:V)O;VLO4F5C:7!E+S4R,C8V/@T*(R`@ M("`@("`@("`@("`@("!O(%5S97,@8V]D92!O9B!3;W)T961486)L92!B>2!2 M:6-K($QA=W-O;B!F;W5N9"!A=`T*(R`@("`@("`@("`@("`@("`@(#QH='1P M.B\O=&MI;G1E<BYU;G!Y=&AO;FEC+FYE="]W:6MI+U-O<G1A8FQE5&%B;&4^ M#0HC#0HC("`@("`@("`@("`@("`@($9E871U<F5S.@T*(R`@("`@("`@("`@ M("`@("`@(&\@0V%N(&-A;&P@82!C;VUM86YD(&]N(#QR971U<FX^(&]R(&1O M=6)L92UC;&EC:RX-"B,@("`@("`@("`@("`@("`@("!O($=R86)S(&9O8W5S M('=H96X@8VQI8VME9"X-"B,@("`@("`@("`@("`@("`@("!O($-O;'5M;G,@ M87)E(')E<VEZ86)L92X-"B,@("`@("`@("`@("`@("`@("!O(%!R;W!E<FQY M(&AA;F1L97,@:V5Y8F]A<F0@;F%V:6=A=&EO;BX-"B,@("`@("`@("`@("`@ M("`@("!O(%-O<G1S('=H96X@<V]L=6UN(&QA8F5L<R!A<F4@8VQI8VME9"X- M"B,@("`@("`@("`@("`@("`@("!O($EN8VQU9&5S(&$@=F5R=&EC86P@<V-R M;VQL8F%R+@T*(R`@("`@("`@("`@("`@("`@(&\@3F\@97AT97)N86P@;&EB M<F%R:65S(&5X8V5P="!T:VEN=&5R+@T*(R`@("`@("`@("`@("`@("`@("`- M"B,@("`@("`@("`@("`@("`@3&EM:71A=&EO;G,Z#0HC("`@("`@("`@("`@ M("`@("`@;R!/;FQY('-I;F=L92!S96QE8W1I;VXN#0HC("`@("`@("`@("`@ M("`@("`@;R!.;R!H;W)I>F]N=&%L('-C<F]L;&EN9RX-"B,@("`@("`@("`@ M("`@("`@("!O(%9E<G1I8V%L('-C<F]L;&)A<B!I<R!A;'=A>7,@<')E<V5N M="X-"B,-"B,@("`@3&%N9W5A9V4Z("`@4'ET:&]N(#(N,PT*(PT*(R`@("!! M=71H;W(Z("`@("!";V(@2&%U8VL-"B,@("`@0V]P>7)I9VAT(#(P,#$L($-O M9&5M(%-Y<W1E;7,@26YC+BP@($%L;"!R:6=H=',@<F5S97)V960N#0HC#0HC M("`@($-O9&5M(%-Y<W1E;7,L($EN8RX-"B,@("`@-R!%>&5C=71I=F4@4&%R M:R!$<FEV92P@#0HC("`@($UE<G)I;6%C:RP@3D@@(#`S,#4T#0HC#0HC($QI M8V5N<V4-"B,@+2TM+2TM+0T*(PT*(R!2961I<W1R:6)U=&EO;B!A;F0@=7-E M(&EN('-O=7)C92!A;F0@8FEN87)Y(&9O<FUS+"!W:71H(&]R('=I=&AO=70- M"B,@;6]D:69I8V%T:6]N+"!A<F4@<&5R;6ET=&5D('!R;W9I9&5D('1H870@ M=&AE(&9O;&QO=VEN9R!C;VYD:71I;VYS#0HC(&%R92!M970Z#0HC#0HC(#$N M(%)E9&ES=')I8G5T:6]N<R!O9B!S;W5R8V4@8V]D92!M=7-T(')E=&%I;B!T M:&4@86)O=F4@8V]P>7)I9VAT#0HC("`@(&YO=&EC92P@=&AI<R!L:7-T(&]F M(&-O;F1I=&EO;G,@86YD('1H92!F;VQL;W=I;F<@9&ES8VQA:6UE<BX-"B,@ M#0HC(#(N(%)E9&ES=')I8G5T:6]N<R!I;B!B:6YA<GD@9F]R;2!M=7-T(')E M<')O9'5C92!T:&4@86)O=F4@8V]P>7)I9VAT#0HC("`@(&YO=&EC92P@=&AI M<R!L:7-T(&]F(&-O;F1I=&EO;G,@86YD('1H92!F;VQL;W=I;F<@9&ES8VQA M:6UE<B!I;B!T:&4-"B,@("`@9&]C=6UE;G1A=&EO;B!A;F0O;W(@;W1H97(@ M;6%T97)I86QS('!R;W9I9&5D('=I=&@@=&AE(&1I<W1R:6)U=&EO;BX-"B,- M"B,@,RX@3F5I=&AE<B!T:&4@;F%M92!O9B!T:&4@875T:&]R(&YO<B!T:&4@ M;F%M97,@;V8@86YY(&-O;G1R:6)U=&]R<PT*(R`@("!M87D@8F4@=7-E9"!T M;R!E;F1O<G-E(&]R('!R;VUO=&4@<')O9'5C=',@9&5R:79E9"!F<F]M('1H M:7,@<V]F='=A<F4-"B,@("`@=VET:&]U="!S<&5C:69I8R!P<FEO<B!W<FET M=&5N('!E<FUI<W-I;VXN#0HC#0HC(%=A<G)A;G1Y#0HC("TM+2TM+2TM#0HC M#0HC(%1(25,@4T]&5%=!4D4@25,@4%)/5DE$140@0ED@5$A%($%55$A/4B!! M3D0@0T].5%))0E543U)3(&!@05,@25,G)R!!3D0-"B,@04Y9($584%)%4U,@ M3U(@24U03$E%1"!705)204Y42453+"!)3D-,541)3D<L($)55"!.3U0@3$E- M251%1"!43RP@5$A%#0HC($E-4$Q)140@5T%24D%.5$E%4R!/1B!-15)#2$%. M5$%"24Q)5%D@04Y$($9)5$Y%4U,@1D]2($$@4$%25$E#54Q!4B!055)03U-% M#0HC($%212!$25-#3$%)345$+B`@24X@3D\@159%3E0@4TA!3$P@5$A%($%5 M5$A/4B!/4B!#3TY44DE"551/4E,@0D4@3$E!0DQ%#0HC($9/4B!!3ED@1$E2 M14-4+"!)3D1)4D5#5"P@24Y#241%3E1!3"P@4U!%0TE!3"P@15A%35!,05)9 M+"!/4B!#3TY315%514Y424%,#0HC($1!34%'15,@*$E.0TQ51$E.1RP@0E54 M($Y/5"!,24U)5$5$(%1/+"!04D]#55)%345.5"!/1B!354)35$E4551%($=/ M3T13#0HC($]2(%-%4E9)0T53.R!,3U-3($]&(%5312P@1$%402P@3U(@4%)/ M1DE44SL@3U(@0E5324Y%4U,@24Y415)255!424].*0T*(R!(3U=%5D52($-! M55-%1"!!3D0@3TX@04Y9(%1(14]262!/1B!,24%"24Q)5%DL(%=(151(15(@ M24X@0T].5%)!0U0L(%-44DE#5`T*(R!,24%"24Q)5%DL($]2(%1/4E0@*$E. M0TQ51$E.1R!.14=,24=%3D-%($]2($]42$525TE312D@05))4TE.1R!)3B!! M3ED@5T%9#0HC($]55"!/1B!42$4@55-%($]&(%1(25,@4T]&5%=!4D4L($56 M14X@248@041625-%1"!/1B!42$4@4$]34TE"24Q)5%D@3T8-"B,@4U5#2"!$ M04U!1T4N#0HC#0HC(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C#0IF<F]M(%1K M:6YT97(@:6UP;W)T("H-"@T*34]615],24Y%4R`](#`-"DU/5D5?4$%'15,@ M/2`Q#0I-3U9%7U1/14Y$(#T@,@T*#0IC;&%S<R!-=6QT:4QI<W1B;W@H1G)A M;64I.@T*("`@("(B(@T*("`@($UU;'1I3&ES=&)O>"!#;&%S<RX-"@T*("`@ M($1E9FEN97,@82!M=6QT:2UC;VQU;6X@;&ES=&)O>"X@(%1H92!C;VYS=')U M8W1O<B!T86ME<R!A(&QI<W0@;V8-"B`@("!T=7!L97,L('=H97)E(&5A8V@@ M='5P;&4@:7,@*&-O;'5M;BUL86)E;"P@8VAA<F%C=&5R+7=I9'1H*2X@(%1H M90T*("`@(&QI<W0@=VEL;"!H879E(&%S(&UA;GD@8V]L=6UN<R!A<R!T=7!L M97,N("!!9&0@:71E;7,@=&\@=&AE(&QI<W0@8GD-"B`@("!P87-S:6YG('1U M<&QE<R!O<B!L:7-T<R!O9B!I=&5M<RP@;VYE(&9O<B!E86-H(&-O;'5M;BX- M"@T*("`@($5A8V@@8V]L=6UN('=I;&P@8F4@9VEV96X@=&AE('-P96-I9FEE M9"!W:61T:"!I;B!C:&%R86-T97(@=6YI=',L#0H@("`@=VET:"!A(&AE861E M<B!O9B!C;VQU;6XM;&%B96PN("!!;'-O('1A:V5S(&UA;GD@;V8@=&AE(&YO M<FUA;`T*("`@($QI<W1B;W@@;W!T:6]N<R!F;W(@8F%C:V=R;W5N9"P@9F]N M="P@971C+@T*("`@("(B(@T*("`@(&1E9B!?7VEN:71?7RAS96QF+"!M87-T M97(L(&QI<W1S+"!C;VUM86YD/4YO;F4L("HJ;W!T:6]N<RDZ#0H@("`@("`@ M(&1E9F%U;'1S(#T@>PT*("`@("`@("`@("`@)V)A8VMG<F]U;F0G.B!.;VYE M+`T*("`@("`@("`@("`@)V)O<F1E<G=I9'1H)SH@,BP-"B`@("`@("`@("`@ M("=F;VYT)SH@3F]N92P-"B`@("`@("`@("`@("=F;W)E9W)O=6YD)SH@3F]N M92P-"B`@("`@("`@("`@("=H96EG:'0G.B`Q,"P-"B`@("`@("`@("`@("=H M:6=H;&EG:'1C;VQO<B<Z($YO;F4L#0H@("`@("`@("`@("`G:&EG:&QI9VAT M=&AI8VMN97-S)SH@,2P-"B`@("`@("`@("`@("=R96QI968G.B!354Y+14XL M#0H@("`@("`@("`@("`G=&%K969O8W5S)SH@,2P-"B`@("`@("`@("`@('T- M"@T*("`@("`@("!A;&EA<V5S(#T@>R=B9R<Z)V)A8VMG<F]U;F0G+"`G9F<G M.B=F;W)E9W)O=6YD)RP@)V)D)SHG8F]R9&5R=VED=&@G?0T*#0H@("`@("`@ M(&9O<B!K(&EN(&%L:6%S97,N:V5Y<R`H*3H-"B`@("`@("`@("`@(&EF(&]P M=&EO;G,N:&%S7VME>2`H:RDZ#0H@("`@("`@("`@("`@("`@;W!T:6]N<R!; M86QI87-E<UMK75T@/2!O<'1I;VYS(%MK70T*("`@("`@("`@("`@#0H@("`@ M("`@(&9O<B!K97D@:6X@9&5F875L=',N:V5Y<R@I.@T*("`@("`@("`@("`@ M:68@;F]T(&]P=&EO;G,N:&%S7VME>2`H:V5Y*3H-"B`@("`@("`@("`@("`@ M("!O<'1I;VYS(%MK97E=(#T@9&5F875L=',@6VME>5T-"@T*("`@("`@("!A M<'!L>2`H1G)A;64N7U]I;FET7U\L("AS96QF+"!M87-T97(I+"!O<'1I;VYS M*0T*("`@("`@("!S96QF+FQI<W1S(#T@6UT-"@T*("`@("`@("`C($U(("@P M-2\R,#`T.0T*("`@("`@("`C(%1H97-E(&%R92!N965D960@9F]R('-O<G1I M;F<-"B`@("`@("`@<V5L9BYC;VQM87!P:6YG/7M]#0H@("`@("`@('-E;&8N M;W)I9T1A=&$@/2!.;VYE#0H-"B`@("`@("`@(R`@2V5Y8F]A<F0@;F%V:6=A M=&EO;BX-"B`@("`@("`@#0H@("`@("`@('-E;&8N8FEN9"`H)SQ5<#XG+"`@ M("!L86UB9&$@92P@<SUS96QF.B!S+E]M;W9E("@M,2P@34]615],24Y%4RDI M#0H@("`@("`@('-E;&8N8FEN9"`H)SQ$;W=N/B<L("!L86UB9&$@92P@<SUS M96QF.B!S+E]M;W9E("@K,2P@34]615],24Y%4RDI#0H@("`@("`@('-E;&8N M8FEN9"`H)SQ0<FEO<CXG+"!L86UB9&$@92P@<SUS96QF.B!S+E]M;W9E("@M M,2P@34]615]004=%4RDI#0H@("`@("`@('-E;&8N8FEN9"`H)SQ.97AT/B<L M("!L86UB9&$@92P@<SUS96QF.B!S+E]M;W9E("@K,2P@34]615]004=%4RDI M#0H@("`@("`@('-E;&8N8FEN9"`H)SQ(;VUE/B<L("!L86UB9&$@92P@<SUS M96QF.B!S+E]M;W9E("@M,2P@34]615]43T5.1"DI#0H@("`@("`@('-E;&8N M8FEN9"`H)SQ%;F0^)RP@("!L86UB9&$@92P@<SUS96QF.B!S+E]M;W9E("@K M,2P@34]615]43T5.1"DI#0H@("`@("`@(&EF(&-O;6UA;F0Z#0H@("`@("`@ M("`@("!S96QF+F)I;F0@*"<\4F5T=7)N/B<L(&-O;6UA;F0I#0H-"B`@("`@ M("`@(R!#;VQU;6YS(&%R92!A(&9R86UE('=I=&@@;&ES=&)O>"!A;F0@;&%B M96P@:6X@:70N#0H@("`@("`@(`T*("`@("`@("`C($U(("@P-2\R,#`T*3H- M"B`@("`@("`@(R!);G1R;V1U8V5D(&$@4&%N9617:6YD;W<@=&\@;6%K92!T M:&4@8V]L=6UN<R!R97-I>F%B;&4-"B`@("`@("`@#0H@("`@("`@(&T@/2!0 M86YE9%=I;F1O=RAS96QF+"!O<FEE;G0]2$]225I/3E1!3"P@8F0],"P@8F%C M:V=R;W5N9#UO<'1I;VYS6R=B86-K9W)O=6YD)UTL('-H;W=H86YD;&4],"P@ M<V%S:'!A9#TQ*0T*("`@("`@("!M+G!A8VLH<VED93U,1494+"!F:6QL/4)/ M5$@L(&5X<&%N9#TQ*0T*#0H@("`@("`@(&9O<B!L86)E;"P@=VED=&@@:6X@ M;&ES=',Z#0H@("`@("`@("`@("!L8F9R86UE(#T@1G)A;64H;2D-"B`@("`@ M("`@("`@(&TN861D*&QB9G)A;64L('=I9'1H/7=I9'1H*0T*("`@("`@("`@ M("`@(R!-2"`H,#4O,C`P-"D-"B`@("`@("`@("`@(",@;6]D:69I960@=&AI M<RP@8VQI8VL@=&\@<V]R=`T*("`@("`@("`@("`@8B`]($QA8F5L*&QB9G)A M;64L('1E>'0];&%B96PL(&)O<F1E<G=I9'1H/3$L(')E;&EE9CU204E3140I M#0H@("`@("`@("`@("!B+G!A8VLH9FEL;#U8*0T*("`@("`@("`@("`@8BYB M:6YD*"<\0G5T=&]N+3$^)RP@<V5L9BY?<V]R="D-"@T*("`@("`@("`@("`@ M<V5L9BYC;VQM87!P:6YG6V)=/2AL96XH<V5L9BYL:7-T<RDL,2D-"B`@("`@ M("`@("`@(`T*("`@("`@("`@("`@;&(@/2!,:7-T8F]X("AL8F9R86UE+`T* M("`@("`@("`@("`@("`@("`@("`@("`@("!W:61T:#UW:61T:"P-"B`@("`@ M("`@("`@("`@("`@("`@("`@("`@:&5I9VAT/6]P=&EO;G,@6R=H96EG:'0G M72P-"B`@("`@("`@("`@("`@("`@("`@("`@("`@8F]R9&5R=VED=&@],"P- M"B`@("`@("`@("`@("`@("`@("`@("`@("`@9F]N=#UO<'1I;VYS(%LG9F]N M="==+`T*("`@("`@("`@("`@("`@("`@("`@("`@("!B86-K9W)O=6YD/6]P M=&EO;G,@6R=B86-K9W)O=6YD)UTL#0H@("`@("`@("`@("`@("`@("`@("`@ M("`@('-E;&5C=&)O<F1E<G=I9'1H/3`L#0H@("`@("`@("`@("`@("`@("`@ M("`@("`@(')E;&EE9CU354Y+14XL#0H@("`@("`@("`@("`@("`@("`@("`@ M("`@('1A:V5F;V-U<SU&04Q312P-"B`@("`@("`@("`@("`@("`@("`@("`@ M("`@97AP;W)T<V5L96-T:6]N/49!3%-%*0T*("`@("`@("`@("`@;&(N<&%C M:R`H97AP86YD/5E%4RP@9FEL;#U"3U1(*0T*("`@("`@("`@("`@<V5L9BYL M:7-T<RYA<'!E;F0@*&QB*0T*#0H@("`@("`@("`@("`C($UO=7-E(&9E871U M<F5S#0H@("`@("`@("`@("`-"B`@("`@("`@("`@(&QB+F)I;F0@*"<\0C$M M36]T:6]N/B<L(&QA;6)D82!E+"!S/7-E;&8Z(',N7W-E;&5C="`H92YY*2D- M"B`@("`@("`@("`@(&QB+F)I;F0@*"<\0G5T=&]N+3$^)RP@(&QA;6)D82!E M+"!S/7-E;&8Z(',N7W-E;&5C="`H92YY*2D-"B`@("`@("`@("`@(&QB+F)I M;F0@*"<\3&5A=F4^)RP@("`@(&QA;6)D82!E.B`G8G)E86LG*0T*("`@("`@ M("`@("`@;&(N8FEN9"`H)SQ",BU-;W1I;VX^)RP@;&%M8F1A(&4L(',]<V5L M9CH@<RY?8C)M;W1I;VX@*&4N>"P@92YY*2D-"B`@("`@("`@("`@(&QB+F)I M;F0@*"<\0G5T=&]N+3(^)RP@(&QA;6)D82!E+"!S/7-E;&8Z(',N7V)U='1O M;C(@*&4N>"P@92YY*2D-"B`@("`@("`@("`@(&EF(&-O;6UA;F0Z#0H@("`@ M("`@("`@("`@("`@;&(N8FEN9"`H)SQ$;W5B;&4M0G5T=&]N+3$^)RP@8V]M M;6%N9"D-"@T*("`@("`@("!S8F9R86UE(#T@1G)A;64@*'-E;&8I#0H@("`@ M("`@('-B9G)A;64N<&%C:R`H<VED93U,1494+"!F:6QL/5DI#0H@("`@("`@ M(&P@/2!,86)E;"`H<V)F<F%M92P@8F]R9&5R=VED=&@],2P@<F5L:65F/5)! M25-%1"D-"B`@("`@("`@;"YB:6YD("@G/$)U='1O;BTQ/B<L(&QA;6)D82!E M+"!S/7-E;&8Z(',N9F]C=7-?<V5T("@I*0T*("`@("`@("!L+G!A8VLH9FEL M;#U8*0T*("`@("`@("!S8B`](%-C<F]L;&)A<B`H<V)F<F%M92P-"B`@("`@ M("`@("`@("`@("`@("`@("`@('1A:V5F;V-U<SU&04Q312P-"B`@("`@("`@ M("`@("`@("`@("`@("`@(&]R:65N=#U615)424-!3"P-"B`@("`@("`@("`@ M("`@("`@("`@("`@(&-O;6UA;F0]<V5L9BY?<V-R;VQL*0T*("`@("`@("!S M8BYP86-K("AE>'!A;F0]6453+"!F:6QL/5DI#0H@("`@("`@('-E;&8N;&ES M='-;,%U;)WES8W)O;&QC;VUM86YD)UT]<V(N<V5T#0H-"B`@("`@("`@<F5T M=7)N#0H-"@T*("`@(",@34@@*#`U+S(P,#0I#0H@("`@(R!3;W)T(&9U;F-T M:6]N+"!A9&]P=&5D(&9R;VT@4FEC:R!,87=S;VX@#0H@("`@(R!H='1P.B\O M=&MI;G1E<BYU;G!Y=&AO;FEC+FYE="]W:6MI+U-O<G1A8FQE5&%B;&4-"B`@ M("`-"B`@("!D968@7W-O<G0H<V5L9BP@92DZ#0H@("`@("`@(",@9V5T('1H M92!L:7-T8F]X('1O('-O<G0@8GD@*&UA<'!E9"!B>2!T:&4@:&5A9&5R(&)U M='1O;BD-"B`@("`@("`@8CUE+G=I9&=E=`T*("`@("`@("!C;VPL(&1I<F5C M=&EO;B`]('-E;&8N8V]L;6%P<&EN9UMB70T*#0H@("`@("`@(",@9V5T('1H M92!E;G1I<F4@=&%B;&4@9&%T82!I;G1O(&UE;0T*("`@("`@("!T86)L941A M=&$@/2!S96QF+F=E="@P+$5.1"D-"B`@("`@("`@:68@<V5L9BYO<FEG1&%T M82`]/2!.;VYE.@T*("`@("`@("`@("`@:6UP;W)T(&-O<'D-"B`@("`@("`@ M("`@('-E;&8N;W)I9T1A=&$@/2!C;W!Y+F1E97!C;W!Y*'1A8FQE1&%T82D- M"@T*("`@("`@("!R;W=C;W5N="`](&QE;BAT86)L941A=&$I#0H-"B`@("`@ M("`@(W)E;6]V92!O;&0@<V]R="!I;F1I8V%T;W)S(&EF(&ET(&5X:7-T<PT* M("`@("`@("!F;W(@8G1N(&EN('-E;&8N8V]L;6%P<&EN9RYK97ES*"DZ#0H@ M("`@("`@("`@("!L86(@/2!B=&XN8V=E="@G=&5X="<I#0H@("`@("`@("`@ M("!I9B!L86);,%T]/2=;)SH@8G1N+F-O;F9I9RAT97AT/6QA8ELT.ETI#0H- M"B`@("`@("`@8G1N3&%B96P@/2!B+F-G970H)W1E>'0G*0T*("`@("`@("`C M<V]R="!D871A(&)A<V5D(&]N(&1I<F5C=&EO;@T*("`@("`@("!I9B!D:7)E M8W1I;VX]/3`Z#0H@("`@("`@("`@("!T86)L941A=&$@/2!S96QF+F]R:6=$ M871A#0H@("`@("`@(&5L<V4Z#0H@("`@("`@("`@("!I9B!D:7)E8W1I;VX] M/3$Z(&(N8V]N9FEG*'1E>'0])ULK72`G("L@8G1N3&%B96PI#0H@("`@("`@ M("`@("!E;'-E.B!B+F-O;F9I9RAT97AT/2=;+5T@)R`K(&)T;DQA8F5L*0T* M("`@("`@("`@("`@(R!S;W)T(&)Y(&-O;`T*("`@("`@("`@("`@9&5F(&-O M;'-O<G0H>"P@>2P@;7EC;VP]8V]L+"!D:7)E8W1I;VX]9&ER96-T:6]N*3H- M"B`@("`@("`@("`@("`@("!R971U<FX@9&ER96-T:6]N*F-M<"AX6VUY8V]L M72P@>5MM>6-O;%TI#0H-"B`@("`@("`@("`@('1A8FQE1&%T82YS;W)T*&-O M;'-O<G0I#0H-"B`@("`@("`@(V-L96%R('=I9&=E=`T*("`@("`@("!S96QF M+F1E;&5T92@P+$5.1"D-"@T*("`@("`@("`C(')E9FEL;"!W:61G970-"B`@ M("`@("`@9F]R(')O=R!I;B!R86YG92AR;W=C;W5N="DZ#0H@("`@("`@("`@ M("!S96QF+FEN<V5R="A%3D0L('1A8FQE1&%T85MR;W==*0T*#0H@("`@("`@ M(",@=&]G9VQE(&1I<F5C=&EO;B!F;&%G(`T*("`@("`@("!I9BAD:7)E8W1I M;VX]/3$I.B!D:7)E8W1I;VX]+3$-"B`@("`@("`@96QS93H@9&ER96-T:6]N M("L](#$-"B`@("`@("`@<V5L9BYC;VQM87!P:6YG6V)=(#T@*&-O;"P@9&ER M96-T:6]N*2`-"B`@("`@("`@#0H-"B`@("!D968@7VUO=F4@*'-E;&8L(&QI M;F5S+"!R96QA=&EV93TP*3H-"B`@("`@("`@(B(B#0H@("`@("`@($UO=F4@ M=&AE('-E;&5C=&EO;B!A('-P96-I9FEE9"!N=6UB97(@;V8@;&EN97,@;W(@ M<&%G97,@=7`@;W(-"B`@("`@("`@9&]W;B!T:&4@;&ES="X@(%5S960@8GD@ M:V5Y8F]A<F0@;F%V:6=A=&EO;BX-"B`@("`@("`@(B(B#0H@("`@("`@('-E M;&5C=&5D(#T@<V5L9BYL:7-T<R!;,%TN8W5R<V5L96-T:6]N("@I#0H@("`@ M("`@('1R>3H-"B`@("`@("`@("`@('-E;&5C=&5D(#T@;6%P("AI;G0L('-E M;&5C=&5D*0T*("`@("`@("!E>&-E<'0@5F%L=65%<G)O<CH-"B`@("`@("`@ M("`@('!A<W,-"@T*("`@("`@("!T<GDZ#0H@("`@("`@("`@("!S96P@/2!S M96QE8W1E9"!;,%T-"B`@("`@("`@97AC97!T($EN9&5X17)R;W(Z#0H@("`@ M("`@("`@("!S96P@/2`P#0H-"B`@("`@("`@;VQD("`]('-E;`T*("`@("`@ M("!S:7IE(#T@<V5L9BYL:7-T<R!;,%TN<VEZ92`H*0T*("`@("`@("`-"B`@ M("`@("`@:68@<F5L871I=F4@/3T@34]615],24Y%4SH-"B`@("`@("`@("`@ M('-E;"`]('-E;"`K(&QI;F5S#0H@("`@("`@(&5L:68@<F5L871I=F4@/3T@ M34]615]004=%4SH-"B`@("`@("`@("`@('-E;"`]('-E;"`K("AL:6YE<R`J M(&EN="`H<V5L9BYL:7-T<R!;,%U;)VAE:6=H="==*2D-"B`@("`@("`@96QI M9B!R96QA=&EV92`]/2!-3U9%7U1/14Y$.@T*("`@("`@("`@("`@:68@;&EN M97,@/"`P.@T*("`@("`@("`@("`@("`@('-E;"`](#`-"B`@("`@("`@("`@ M(&5L:68@;&EN97,@/B`P.@T*("`@("`@("`@("`@("`@('-E;"`]('-I>F4@ M+2`Q#0H@("`@("`@(&5L<V4Z#0H@("`@("`@("`@("!P<FEN="`B375L=&E, M:7-T8F]X+E]M;W9E.B!5;FMN;W=N(&UO=F4@='EP92$B#0H-"B`@("`@("`@ M:68@<V5L(#P@,#H-"B`@("`@("`@("`@('-E;"`](#`-"B`@("`@("`@96QI M9B!S96P@/CT@<VEZ93H-"B`@("`@("`@("`@('-E;"`]('-I>F4@+2`Q#0H@ M("`@("`@(`T*("`@("`@("!S96QF+G-E;&5C=&EO;E]C;&5A<B`H;VQD+"!O M;&0I#0H@("`@("`@('-E;&8N<V5E("AS96PI#0H@("`@("`@('-E;&8N<V5L M96-T:6]N7W-E="`H<V5L*0T*("`@("`@("!R971U<FX@)V)R96%K)PT*#0H- M"B`@("!D968@7W-E;&5C="`H<V5L9BP@>2DZ#0H@("`@("`@("(B(@T*("`@ M("`@("!5<V5R(&-L:6-K960@86X@:71E;2!T;R!S96QE8W0@:70N#0H@("`@ M("`@("(B(@T*("`@("`@("!R;W<@/2!S96QF+FQI<W1S6S!=+FYE87)E<W0@ M*'DI#0H@("`@("`@('-E;&8N<V5L96-T:6]N7V-L96%R("@P+"!%3D0I#0H@ M("`@("`@('-E;&8N<V5L96-T:6]N7W-E="`H<F]W*0T*("`@("`@("!S96QF M+F9O8W5S7W-E="`H*0T*("`@("`@("!R971U<FX@)V)R96%K)PT*#0H-"B`@ M("!D968@7V)U='1O;C(@*'-E;&8L('@L('DI.@T*("`@("`@("`B(B(-"B`@ M("`@("`@57-E<B!S96QE8W1E9"!W:71H(&)U='1O;B`R('1O('-T87)T(&$@ M9')A9RX-"B`@("`@("`@(B(B#0H@("`@("`@(&9O<B!L(&EN('-E;&8N;&ES M=',Z#0H@("`@("`@("`@("!L+G-C86Y?;6%R:R`H>"P@>2D-"B`@("`@("`@ M<F5T=7)N("=B<F5A:R<-"@T*#0H@("`@9&5F(%]B,FUO=&EO;B`H<V5L9BP@ M>"P@>2DZ#0H@("`@("`@("(B(@T*("`@("`@("!5<V5R(&ES(&1R86=G:6YG M('=I=&@@8G5T=&]N(#(N#0H@("`@("`@("(B(@T*("`@("`@("!F;W(@;"!I M;B!S96QF+FQI<W1S.@T*("`@("`@("`@("`@;"YS8V%N7V1R86=T;R`H>"P@ M>2D-"B`@("`@("`@<F5T=7)N("=B<F5A:R<-"@T*#0H@("`@9&5F(%]S8W)O M;&P@*'-E;&8L("IA<F=S*3H-"B`@("`@("`@(B(B#0H@("`@("`@(%-C<F]L M;&EN9R!W:71H('1H92!S8W)O;&QB87(N#0H@("`@("`@("(B(@T*("`@("`@ M("!F;W(@;"!I;B!S96QF+FQI<W1S.@T*("`@("`@("`@("`@87!P;'DH;"YY M=FEE=RP@87)G<RD-"@T*("`@(&1E9B!C=7)S96QE8W1I;VX@*'-E;&8I.@T* M("`@("`@("`B(B(-"B`@("`@("`@4F5T=7)N(&EN9&5X(&]F(&-U<G)E;G0@ M<V5L96-T:6]N+@T*("`@("`@("`B(B(-"B`@("`@("`@<F5T=7)N('-E;&8N M;&ES='-;,%TN8W5R<V5L96-T:6]N*"D-"@T*#0H@("`@9&5F(&1E;&5T92`H M<V5L9BP@9FER<W0L(&QA<W0]3F]N92DZ#0H@("`@("`@("(B(@T*("`@("`@ M("!$96QE=&4@;VYE(&]R(&UO<F4@:71E;7,@9G)O;2!T:&4@;&ES="X-"B`@ M("`@("`@(B(B#0H@("`@("`@(&9O<B!L(&EN('-E;&8N;&ES=',Z#0H@("`@ M("`@("`@("!L+F1E;&5T92AF:7)S="P@;&%S="D-"@T*#0H@("`@9&5F(&=E M="`H<V5L9BP@9FER<W0L(&QA<W0]3F]N92DZ#0H@("`@("`@("(B(@T*("`@ M("`@("!'970@:71E;7,@8F5T=V5E;B!T=V\@:6YD97AE<RP@;W(@;VYE(&ET M96T@:68@<V5C;VYD(&EN9&5X#0H@("`@("`@(&ES(&YO="!S<&5C:69I960N M#0H@("`@("`@("(B(@T*("`@("`@("!R97-U;'0@/2!;70T*("`@("`@("!F M;W(@;"!I;B!S96QF+FQI<W1S.@T*("`@("`@("`@("`@<F5S=6QT+F%P<&5N M9"`H;"YG970@*&9I<G-T+&QA<W0I*0T*("`@("`@("!I9B!L87-T.@T*("`@ M("`@("`@("`@<F5T=7)N(&%P<&QY("AM87`L(%M.;VYE72`K(')E<W5L="D- M"B`@("`@("`@<F5T=7)N(')E<W5L=`T*#0H@("`@("`@("`@("`-"B`@("!D M968@:6YD97@@*'-E;&8L(&EN9&5X*3H-"B`@("`@("`@(B(B#0H@("`@("`@ M($%D:G5S="!T:&4@=FEE=R!S;R!T:&%T('1H92!G:79E;B!I;F1E>"!I<R!A M="!T:&4@=&]P+@T*("`@("`@("`B(B(-"B`@("`@("`@9F]R(&P@:6X@<V5L M9BYL:7-T<SH-"B`@("`@("`@("`@(&PN:6YD97@@*&EN9&5X*0T*#0H-"B`@ M("!D968@:6YS97)T("AS96QF+"!I;F1E>"P@*F5L96UE;G1S*3H-"B`@("`@ M("`@(B(B#0H@("`@("`@($EN<V5R="!L:7-T(&]R('1U<&QE(&]F(&ET96US M+@T*("`@("`@("`B(B(-"B`@("`@("`@9F]R(&4@:6X@96QE;65N=',Z#0H@ M("`@("`@("`@("!I(#T@,`T*("`@("`@("`@("`@9F]R(&P@:6X@<V5L9BYL M:7-T<SH-"B`@("`@("`@("`@("`@("!L+FEN<V5R="`H:6YD97@L(&5;:5TI M#0H@("`@("`@("`@("`@("`@:2`](&D@*R`Q#0H@("`@("`@(&EF('-E;&8N M<VEZ92`H*2`]/2`Q.@T*("`@("`@("`@("`@<V5L9BYS96QE8W1I;VY?<V5T M("@P*0T*("`@("`@("`@("`@#0H-"B`@("!D968@<VEZ92`H<V5L9BDZ#0H@ M("`@("`@("(B(@T*("`@("`@("!2971U<FX@=&AE('1O=&%L(&YU;6)E<B!O M9B!I=&5M<RX-"B`@("`@("`@(B(B#0H@("`@("`@(')E='5R;B!S96QF+FQI M<W1S6S!=+G-I>F4@*"D-"@T*#0H@("`@9&5F('-E92`H<V5L9BP@:6YD97@I M.@T*("`@("`@("`B(B(-"B`@("`@("`@36%K92!S=7)E(&=I=F5N(&EN9&5X M(&ES('9I<VEB;&4N#0H@("`@("`@("(B(@T*("`@("`@("!F;W(@;"!I;B!S M96QF+FQI<W1S.@T*("`@("`@("`@("`@;"YS964@*&EN9&5X*0T*#0H-"B`@ M("!D968@<V5L96-T:6]N7V%N8VAO<B`H<V5L9BP@:6YD97@I.@T*("`@("`@ M("`B(B(-"B`@("`@("`@4V5T('-E;&5C=&EO;B!A;F-H;W(@=&\@:6YD97@N M#0H@("`@("`@("(B(@T*("`@("`@("!F;W(@;"!I;B!S96QF+FQI<W1S.@T* M("`@("`@("`@("`@;"YS96QE8W1I;VY?86YC:&]R("AI;F1E>"D-"@T*#0H@ M("`@9&5F('-E;&5C=&EO;E]C;&5A<B`H<V5L9BP@9FER<W0L(&QA<W0]3F]N M92DZ#0H@("`@("`@("(B(@T*("`@("`@("!#;&5A<B!S96QE8W1I;VYS(&)E M='=E96X@='=O(&EN9&5X97,N#0H@("`@("`@("(B(@T*("`@("`@("!F;W(@ M;"!I;B!S96QF+FQI<W1S.@T*("`@("`@("`@("`@;"YS96QE8W1I;VY?8VQE M87(@*&9I<G-T+"!L87-T*0T*#0H-"B`@("!D968@<V5L96-T:6]N7VEN8VQU M9&5S("AS96QF+"!I;F1E>"DZ#0H@("`@("`@("(B(@T*("`@("`@("!$971E M<FUI;F4@:68@9VEV96X@:6YD97@@:7,@<V5L96-T960N#0H@("`@("`@("(B M(@T*("`@("`@("!R971U<FX@<V5L9BYL:7-T<ULP72YS96QE8W1I;VY?:6YC M;'5D97,@*&EN9&5X*0T*#0H-"B`@("!D968@<V5L96-T:6]N7W-E="`H<V5L M9BP@9FER<W0L(&QA<W0]3F]N92DZ#0H@("`@("`@("(B(@T*("`@("`@("!3 M96QE8W0@82!R86YG92!O9B!I;F1E>&5S+@T*("`@("`@("`B(B(-"B`@("`@ M("`@9F]R(&P@:6X@<V5L9BYL:7-T<SH-"B`@("`@("`@("`@(&PN<V5L96-T M:6]N7W-E="`H9FER<W0L(&QA<W0I#0H-"@T*:68@7U]N86UE7U\@/3T@)U]? M;6%I;E]?)SH-"B`@("!T:R`](%1K*"D-"B`@("!,86)E;"AT:RP@=&5X=#TG M375L=&E,:7-T8F]X)RDN<&%C:R@I#0H@("`@;6QB(#T@375L=&E,:7-T8F]X M("AT:RP-"B`@("`@("`@("`@("`@("`@("`@("`@("@H)U-U8FIE8W0G+"`Q M-3`I+`T*("`@("`@("`@("`@("`@("`@("`@("`@("@G4V5N9&5R)RP@,3`P M*2P-"B`@("`@("`@("`@("`@("`@("`@("`@("`H)T1A=&4G+"`Q,#`I*2P- M"B`@("`@("`@("`@("`@("`@("`@("`@(&AE:6=H=#TR,"P-"B`@("`@("`@ M("`@("`@("`@("`@("`@(&)G/2=W:&ET92<I#0H@("`@9F]R(&D@:6X@<F%N M9V4@*#$P,"DZ#0H@("`@("`@(&UL8BYI;G-E<G0@*$5.1"P@*"=);7!O<G1A M;G0@365S<V%G93H@)60G("4@:2P-"B`@("`@("`@("`@("`@("`@("`@("`@ M("`@)TIO:&X@1&]E)RP-"B`@("`@("`@("`@("`@("`@("`@("`@("`@)S$P M+S$P+R4P-&0G("4@*#$Y,#`K:2DI*0T*("`@(&UL8BYP86-K("AE>'!A;F0] M6453+&9I;&P]0D]42"D-"B`@("!"=71T;VX@*'1K+"!T97AT/2)B=71T;VXB
*2YP86-K("@I#0H@("`@=&LN;6%I;FQO;W`H*0T* ` end
_______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Matthias Huening wrote: | begin 644 mhMultiListBox.py | M(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C(R,C [...] Dein Mailer ist kaputt ;) - -- nihil me cirumdat .. . .. ... . . .. . ... . .. . ... . . . pgp key @ http://files.poelzi.org/pgp.txt ED80 E53D 5269 4BB1 1E73 3A53 CBF9 A421 0A7B 003D -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) Comment: Using GnuPG with Debian - http://enigmail.mozdev.org iD8DBQFA0uZ4y/mkIQp7AD0RAu0+AJ9vC6f/t0GeBjFUZk18Ot5ecx6BygCgzMaF a4W55ijMLRCPswm/0nFNzD8= =kuU+ -----END PGP SIGNATURE----- _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Matthias Huening <mhuening@zedat.fu-berlin.de> wrote in news:Xns950C90B12ED71mhueningzedatfuberli@80.91.224.252:
Hallo,
Zur ursprünglichen Frage (mehrspaltige Listbox in TKinter) hätte ich noch meine angepasste Version von MultiListbox.py anzubieten (s. Attachment).
Ups - sorry, das Versenden des Attachments scheint nicht so geklappt zu haben, wie ich mir das vorgestellt habe. Ich versuch's noch einmal... Matthias ###################################################################### # # File: mhMultiListBox.py # # Purpose: Multi-column list box. Acts mostly like a regular # tkinter listbox + scrollbar, but supports multiple # columns with heading labels. # # o Enhanced version of MultiListBox.py by Bob Hauck # which can be found at <http://www.haucks.org/> # o Based on work by Brent Burley found at: # <http://aspn.activestate.com/ASPN/Python/Cookbook/Recipe/52266> # o Uses code of SortedTable by Rick Lawson found at # <http://tkinter.unpythonic.net/wiki/SortableTable> # # Features: # o Can call a command on <return> or double-click. # o Grabs focus when clicked. # o Columns are resizable. # o Properly handles keyboard navigation. # o Sorts when solumn labels are clicked. # o Includes a vertical scrollbar. # o No external libraries except tkinter. # # Limitations: # o Only single selection. # o No horizontal scrolling. # o Vertical scrollbar is always present. # # Language: Python 2.3 # # Author: Bob Hauck # Copyright 2001, Codem Systems Inc., All rights reserved. # # Codem Systems, Inc. # 7 Executive Park Drive, # Merrimack, NH 03054 # # License # ------- # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # 3. Neither the name of the author nor the names of any contributors # may be used to endorse or promote products derived from this software # without specific prior written permission. # # Warranty # -------- # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # ###################################################################### from Tkinter import * MOVE_LINES = 0 MOVE_PAGES = 1 MOVE_TOEND = 2 class MultiListbox(Frame): """ MultiListbox Class. Defines a multi-column listbox. The constructor takes a list of tuples, where each tuple is (column-label, character-width). The list will have as many columns as tuples. Add items to the list by passing tuples or lists of items, one for each column. Each column will be given the specified width in character units, with a header of column-label. Also takes many of the normal Listbox options for background, font, etc. """ def __init__(self, master, lists, command=None, **options): defaults = { 'background': None, 'borderwidth': 2, 'font': None, 'foreground': None, 'height': 10, 'highlightcolor': None, 'highlightthickness': 1, 'relief': SUNKEN, 'takefocus': 1, } aliases = {'bg':'background', 'fg':'foreground', 'bd':'borderwidth'} for k in aliases.keys (): if options.has_key (k): options [aliases[k]] = options [k] for key in defaults.keys(): if not options.has_key (key): options [key] = defaults [key] apply (Frame.__init__, (self, master), options) self.lists = [] # MH (05/20049 # These are needed for sorting self.colmapping={} self.origData = None # Keyboard navigation. self.bind ('<Up>', lambda e, s=self: s._move (-1, MOVE_LINES)) self.bind ('<Down>', lambda e, s=self: s._move (+1, MOVE_LINES)) self.bind ('<Prior>', lambda e, s=self: s._move (-1, MOVE_PAGES)) self.bind ('<Next>', lambda e, s=self: s._move (+1, MOVE_PAGES)) self.bind ('<Home>', lambda e, s=self: s._move (-1, MOVE_TOEND)) self.bind ('<End>', lambda e, s=self: s._move (+1, MOVE_TOEND)) if command: self.bind ('<Return>', command) # Columns are a frame with listbox and label in it. # MH (05/2004): # Introduced a PanedWindow to make the columns resizable m = PanedWindow(self, orient=HORIZONTAL, bd=0, background=options['background'], showhandle=0, sashpad=1) m.pack(side=LEFT, fill=BOTH, expand=1) for label, width in lists: lbframe = Frame(m) m.add(lbframe, width=width) # MH (05/2004) # modified this, click to sort b = Label(lbframe, text=label, borderwidth=1, relief=RAISED) b.pack(fill=X) b.bind('<Button-1>', self._sort) self.colmapping[b]=(len(self.lists),1) lb = Listbox (lbframe, width=width, height=options ['height'], borderwidth=0, font=options ['font'], background=options ['background'], selectborderwidth=0, relief=SUNKEN, takefocus=FALSE, exportselection=FALSE) lb.pack (expand=YES, fill=BOTH) self.lists.append (lb) # Mouse features lb.bind ('<B1-Motion>', lambda e, s=self: s._select (e.y)) lb.bind ('<Button-1>', lambda e, s=self: s._select (e.y)) lb.bind ('<Leave>', lambda e: 'break') lb.bind ('<B2-Motion>', lambda e, s=self: s._b2motion (e.x, e.y)) lb.bind ('<Button-2>', lambda e, s=self: s._button2 (e.x, e.y)) if command: lb.bind ('<Double-Button-1>', command) sbframe = Frame (self) sbframe.pack (side=LEFT, fill=Y) l = Label (sbframe, borderwidth=1, relief=RAISED) l.bind ('<Button-1>', lambda e, s=self: s.focus_set ()) l.pack(fill=X) sb = Scrollbar (sbframe, takefocus=FALSE, orient=VERTICAL, command=self._scroll) sb.pack (expand=YES, fill=Y) self.lists[0]['yscrollcommand']=sb.set return # MH (05/2004) # Sort function, adopted from Rick Lawson # http://tkinter.unpythonic.net/wiki/SortableTable def _sort(self, e): # get the listbox to sort by (mapped by the header button) b=e.widget col, direction = self.colmapping[b] # get the entire table data into mem tableData = self.get(0,END) if self.origData == None: import copy self.origData = copy.deepcopy(tableData) rowcount = len(tableData) #remove old sort indicators if it exists for btn in self.colmapping.keys(): lab = btn.cget('text') if lab[0]=='[': btn.config(text=lab[4:]) btnLabel = b.cget('text') #sort data based on direction if direction==0: tableData = self.origData else: if direction==1: b.config(text='[+] ' + btnLabel) else: b.config(text='[-] ' + btnLabel) # sort by col def colsort(x, y, mycol=col, direction=direction): return direction*cmp(x[mycol], y[mycol]) tableData.sort(colsort) #clear widget self.delete(0,END) # refill widget for row in range(rowcount): self.insert(END, tableData[row]) # toggle direction flag if(direction==1): direction=-1 else: direction += 1 self.colmapping[b] = (col, direction) def _move (self, lines, relative=0): """ Move the selection a specified number of lines or pages up or down the list. Used by keyboard navigation. """ selected = self.lists [0].curselection () try: selected = map (int, selected) except ValueError: pass try: sel = selected [0] except IndexError: sel = 0 old = sel size = self.lists [0].size () if relative == MOVE_LINES: sel = sel + lines elif relative == MOVE_PAGES: sel = sel + (lines * int (self.lists [0]['height'])) elif relative == MOVE_TOEND: if lines < 0: sel = 0 elif lines > 0: sel = size - 1 else: print "MultiListbox._move: Unknown move type!" if sel < 0: sel = 0 elif sel >= size: sel = size - 1 self.selection_clear (old, old) self.see (sel) self.selection_set (sel) return 'break' def _select (self, y): """ User clicked an item to select it. """ row = self.lists[0].nearest (y) self.selection_clear (0, END) self.selection_set (row) self.focus_set () return 'break' def _button2 (self, x, y): """ User selected with button 2 to start a drag. """ for l in self.lists: l.scan_mark (x, y) return 'break' def _b2motion (self, x, y): """ User is dragging with button 2. """ for l in self.lists: l.scan_dragto (x, y) return 'break' def _scroll (self, *args): """ Scrolling with the scrollbar. """ for l in self.lists: apply(l.yview, args) def curselection (self): """ Return index of current selection. """ return self.lists[0].curselection() def delete (self, first, last=None): """ Delete one or more items from the list. """ for l in self.lists: l.delete(first, last) def get (self, first, last=None): """ Get items between two indexes, or one item if second index is not specified. """ result = [] for l in self.lists: result.append (l.get (first,last)) if last: return apply (map, [None] + result) return result def index (self, index): """ Adjust the view so that the given index is at the top. """ for l in self.lists: l.index (index) def insert (self, index, *elements): """ Insert list or tuple of items. """ for e in elements: i = 0 for l in self.lists: l.insert (index, e[i]) i = i + 1 if self.size () == 1: self.selection_set (0) def size (self): """ Return the total number of items. """ return self.lists[0].size () def see (self, index): """ Make sure given index is visible. """ for l in self.lists: l.see (index) def selection_anchor (self, index): """ Set selection anchor to index. """ for l in self.lists: l.selection_anchor (index) def selection_clear (self, first, last=None): """ Clear selections between two indexes. """ for l in self.lists: l.selection_clear (first, last) def selection_includes (self, index): """ Determine if given index is selected. """ return self.lists[0].selection_includes (index) def selection_set (self, first, last=None): """ Select a range of indexes. """ for l in self.lists: l.selection_set (first, last) if __name__ == '__main__': tk = Tk() Label(tk, text='MultiListbox').pack() mlb = MultiListbox (tk, (('Subject', 150), ('Sender', 100), ('Date', 100)), height=20, bg='white') for i in range (100): mlb.insert (END, ('Important Message: %d' % i, 'John Doe', '10/10/%04d' % (1900+i))) mlb.pack (expand=YES,fill=BOTH) Button (tk, text="button").pack () tk.mainloop() _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Mathias Uebel wrote:
Hallo Liste, ich tüfftel gerade an einer mehrspaltigen Listbox. Aber leider nur mit mässigem Erfolg. Meine Frage: Gibt es eventuell ein Modul, eine Klasse dafür? Kennt jemand ein Beispiel? Ich möchte Datensätze anzeigen, darin scrollen und einzel markieren.
Also mein persönlicher Tip ist wxPython, benutze ich sehr viel, und mehrspaltige Listboxen sind einfach kein Problem. Ohne eine Grundsatzdiskussion heraufbeschwören zu wollen, versteht sich, das Toolkit ist Geschmackssache. ciao - chris -- Christian Tismer :^) <mailto:tismer@stackless.com> Mission Impossible 5oftware : Have a break! Take a ride on Python's Johannes-Niemeyer-Weg 9a : *Starship* http://starship.python.net/ 14109 Berlin : PGP key -> http://wwwkeys.pgp.net/ work +49 30 89 09 53 34 home +49 30 802 86 56 mobile +49 173 24 18 776 PGP 0x57F3BF04 9064 F4E1 D754 C2FF 1619 305B C09C 5A3B 57F3 BF04 whom do you want to sponsor today? http://www.stackless.com/ _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (8)
-
Christian Tismer -
Daniel Martin -
daniel.poelzleithner -
Diez B. Roggisch -
kgm -
Mathias Uebel -
Matthias Huening -
Stefan J. Betz