Anfängerfragen

Fragen zu Tkinter.
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

@HWK danke

naja wenn man vorher int davorschreiben würde, würde der ja bei der zuordnung mit curselection eine fehlermeldung ausgeben, da hät ich das dann eher gemerkt. egal, funktioniert die typconvertierung generell so (oder so ähnlich) wie in java (auch mit string())?

achja, habt ihr vielleicht eine bessere idee wie man das mit den fragen regeln kann? ich mach das im moment so:

1 Zeile in der txt = 1 Frage
zerlegen mit || und dann:
[0] = titel
[1] = frage
[2] - [5] = antworten
[6] = evt. anhang (text)
[7] = richtige antwort
[8] = evt. grafik
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo.

Ja, die Umwandlung macht man immer so. Man geht erstmal davon aus, dass das gewünschte funktioniert und wenn nicht, dann behandelt man die entsprechende Ausnahme (EAFP-Prinzip).

Zu deiner Struktur: Ich würde das Feld mit der richtigen Antwort weglassen und dafür definieren, dass die erste Antwortmöglichkeit immer die richtige ist. Wenn du die Fragen dem Benutzer anzeigst, dann mischt du die Antworten die zu einer Frage gehören (random.shuffle).

Sebastian
Das Leben ist wie ein Tennisball.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

DeKugelschieber hat geschrieben:funktioniert die typconvertierung generell so (oder so ähnlich) wie in java (auch mit string())?
Ich weiss ja nicht was du fuer ein Java benutzt, aber ich muss da immer `Integer.valueOf`, `String.valueOf` und dergleichen bemuehen ;)
Aber ja, ganz grob gesagt es funktioniert so aehnlich. (Aber eben nicht Casts wie `(String)`)
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

Ja dann vielen Dank erstmal, wenn ich hier weg komme kann ich das dann zuhause weitermachen und geb euch das ergebnis, das mit dem shuffle klingt gut, aber ich machs erstmal so und bau das dann später erst ein :) muss ja erstmal funktionieren.

Bei Java schreib ich nur a = (int)b; Version ist 1.6.17 (aktuell ist 1.6.18 )

MfG
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

Ja ok, das mit dem int() klappt super, aber zwei Fragen hab ich noch:

1. Wie geht das mit dem lambda jetzt? So nicht:

Code: Alles auswählen

command = lambda: self.answer(1)
edit:

1 hat sich erledigt! Ich wusste nicht das es Python nicht egal ist ob eine Variable und eine Methode den selben Namen haben.

2. Es muss doch möglich sein automatische Zeilenumbrüche in einem Label zu machen, und wenn nicht (was eigentlich total bescheuert ist), was für alternativen gibt es (kein Text()!)?

edit:

Was mir gerade noch so einfällt, kann man ein kleines icon in eine liste vor einen string setzen?
MfG DeKugelschieber
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

Hallo DeKugelschieber
DeKugelschieber hat geschrieben:2. Es muss doch möglich sein automatische Zeilenumbrüche in einem Label zu machen, und wenn nicht (was eigentlich total bescheuert ist), was für alternativen gibt es (kein Text()!)?
Schon einmal etwas mit der Label-Option 'wraplength' (in Pixel) herumgespielt? Oder mit dem hinzufügen (beim Text-String) von '\n'?

Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

was soll ein \n bei einer variablen breite bringen? ich versuchs dann mal mit wraplength.

achja, kann man diesen hässlichen ersten menüeintrag (der der noch ein fenster öffnet) löschen?
MfG DeKugelschieber
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

DeKugelschieber hat geschrieben:2. Es muss doch möglich sein automatische Zeilenumbrüche in einem Label zu machen, und wenn nicht (was eigentlich total bescheuert ist), was für alternativen gibt es (kein Text()!)?
Gibt es irgendeinen speziellen Grund, warum es kein Text-Widget sein soll? Damit kannst du doch genau das erreichen, was du möchtest.
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

vielleicht hab ich das falsch verstanden, aber ein text widget erzeugt doch ein eingabefeld (textarea)? Zumindest kommt sowas dabei raus:

Code: Alles auswählen

from tkinter import *

t = Tk()
tx = Text(t)
tx.pack()
t.mainloop()
MfG DeKugelschieber
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

DeKugelschieber hat geschrieben:Was mir gerade noch so einfällt, kann man ein kleines icon in eine liste vor einen string setzen?
Verstehe nicht so genau was du machen möchtest hier etwas zum ausprobieren.

Code: Alles auswählen

import Tkinter as tk

app_win = tk.Tk()

two_dim_list = [['icon_name_1.gif', 'my_text_string_1'],
                ['icon_name_2.gif', 'my_text_string_2']
                ]

icon_obj = None

for icon_name, text in two_dim_list:
    label = tk.Label(app_win,)
    label.pack()
    label.icon_obj = tk.PhotoImage(file=icon_name)
    label.config(image=label.icon_obj, text=text, compound='left', padx=5)

app_win.mainloop()
Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

nein so nicht^^ ich meine das man ein kleines icon vor jeden auswahlpunkt in eine listbox setzt, damit ich z.b. anzeigen kann ob die antwort richtig oder falsch beantwortet wurde... es würde mir auch erstmal reichen wenn man die hintergrundfarbe eines einzellnen inserts ändern kann (bin ich eigentlich zu anspruchsvoll für tkinter?^^)
MfG DeKugelschieber
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

DeKugelschieber hat geschrieben:(bin ich eigentlich zu anspruchsvoll für tkinter?^^)
Könnte gut sein! Tkinter ist kein 'drag and drop' Spieltruhe.

Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

DeKugelschieber hat geschrieben:vielleicht hab ich das falsch verstanden, aber ein text widget erzeugt doch ein eingabefeld (textarea)? Zumindest kommt sowas dabei raus:
Sicher, wenn du die Basis-Variante verwendest. Du kannst aber ein Text-Widget so konfigurieren, dass es optisch von einem Label nicht unterscheidbar ist - allerdings den von dir gewünschten automatischen Zeilenumbruch beeinhaltet:

Code: Alles auswählen

import tkinter as tk

root = tk.Tk()
lb = tk.Label(root,text="Ein echtes Label ohne Zeilenumbruch etc." )
txt = tk.Text(root,relief="flat",wrap="word",highlightthickness=0,font=lb.cget("font"))
txt.insert("0.0","Das ist ein Pseudo-Label. Sieht aus wie ein echtes Label \
ist aber gar keins! Lässt sich auch prima zusammenschieben und produziert \
dabei automatische Zeilenumbrüche.")
txt.config(state="disabled")
lb.pack(pady=10,padx=10)
txt.pack(fill=tk.X,padx=10)
root.mainloop()
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

Ja! Vielen dank, aber klappt das auch für bottons oder können die wrap = 'word'? (kann ich gerade nicht ausprobieren).
MfG DeKugelschieber
BlackJack

@DeKugelschieber: Du schreibst bei Java ``(int) b`` wenn `b` vom Typ `java.lang.String` ist!? Dann verwendest Du ein anderes Java als ich. ;-)

Zu Variablen und Methoden dürfen nicht den gleichen Namen haben: In Python gibt es keinen Unterschied zwischen diesen beiden. Alles was man an einen Namen binden kann, ist in Python ein Objekt. Inklusive Klassen, Funktionen, und Methoden.
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

Gut das ich das jetzt weiß :) Die dümmsten Fehler sind die die man macht weil man keine Ahnung hat^^. Und ja ich benutze wahrscheinlich eine andere Java Version.
MfG DeKugelschieber
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

DeKugelschieber hat geschrieben:Ja! Vielen dank, aber klappt das auch für bottons oder können die wrap = 'word'? (kann ich gerade nicht ausprobieren).
Das musst du nicht ausprobieren, das kannst du nachlesen: http://www.effbot.org/tkinterbook/tkint ... -reference
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

wraplength, ja aber das kennt wahrscheinlich auch kein = 'word', kann man was (zb. Text()) in einen Button zeichnen?
MfG DeKugelschieber
Benutzeravatar
wuf
User
Beiträge: 1529
Registriert: Sonntag 8. Juni 2003, 09:50

DeKugelschieber hat geschrieben:kann man was (zb. Text()) in einen Button zeichnen?
Du meinst schreiben oder? Kann man natürlich. Was meinst du eigentlich mit Text()? Bei einem Button ist das die Option-text.
z.B. text = 'dein Text'
Hast du 'wraplength' jetzt einmal ausprobiert? Was ist das Resultat?

Gruss wuf :wink:
Take it easy Mates!
Benutzeravatar
DeKugelschieber
User
Beiträge: 82
Registriert: Sonntag 28. Februar 2010, 12:23
Kontaktdaten:

Ja hab ich ausprobiert, aber das geht natürlich nur mit fester Breite, mit in den button zeichnen mein ich das ich ein Text() objekt erzeuge und in den button packe
MfG DeKugelschieber
Antworten