Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python: lukukone python

Sivun loppuun

stt-73 [07.03.2011 20:13:04]

#

# -*- coding: cp1252 -*-

from tkinter import *
import sys

def lue():
    teksti = str(Entry.get(kentta))
    tulos = "Kirjoitit: " + teksti
    teksti_ikkuna['text'] = tulos

def lopeta():
    ikkuna.destroy()
    sys.exit(0)

ikkuna = Tk()
ikkuna.title("Lukukone")
ikkuna.geometry("250x100")

ruutu1 = Frame(ikkuna, borderwidth = 3)
ruutu1.pack()
ruutu2 = Frame(ruutu1, borderwidth = 3)
ruutu2.pack(side = RIGHT)

kentta = Entry(ruutu1)
kentta.pack()

teksti_ikkuna = Label(ruutu1, text = "")
kentta.pack()

lue_nappi = Button(ruutu2, text = "Lue teksti",\
width = 12, command = lue)
lue_nappi.pack()

lopeta_nappi = Button(ruutu2, text = "Lopeta",\
width = 12, command = lopeta)
lopeta_nappi.pack(side = BOTTOM)

ikkuna.mainloop()

Ohjelma on python 3
Ohjelmä tekee käyttöliittymän jossa on tekstikenttä ,lue teksti ja lopeta painikkeet.
Kun kirjoittaa tekstikenttään jotain ja painaa lue teksti painiketta,pitäisi teksti tulostua tekstikentä alapuolelle.

Mutta mitään ei tulostu,tietäiskö joku missä on vika.

Mod. lisäsi kooditagit. Kiinnitä myös huomiota viestiesi kieliasuun.

-tossu- [07.03.2011 20:44:26]

#

stt-73 kirjoitti:

Mutta mitään ei tulostu,tietäiskö joku missä on vika.

Ohjelmassa on parikin vikaa, ensinäkään Labelin tekstiä ei voi asetta käyttämälläsi tavalla, ja vaikka voisikin, et voi muuttaa funktion ulkopuolista muuttujaa funktiosta ilman, että määrittelet sen globaaliksi.

En ole Tkinter-guru, mutta tietääkseni "oikea" tapa muuttaa Labelin tekstiä on liittää siihen StringVar, jonka arvoa muutetaan tähän tyyliin:

import tkinter as tk

def aseta ():
	teksti.set ("Bar")

ikkuna = tk.Tk ()

kehys = tk.Frame (ikkuna)
kehys.pack ()

teksti = tk.StringVar (value="Foo")
tekstiloota = tk.Label (kehys, textvariable=teksti)
tekstiloota.pack ()

nappi = tk.Button (kehys, text="Paina", command=aseta)
nappi.pack ()

ikkuna.mainloop ()

JP_94 [08.03.2011 00:06:17]

#

teksti_ikkuna = Label(ruutu1, text = "")
kentta.pack()

Tämän koodinpätkän toisella rivillä pitäisi ilmeisesti lukea teksti_ikkuna.pack(). Nykyisellään Label jää "paketoimatta", joten se eikä siihen myöhemmin sijoitettu teksti tule näkyville ohjelmassa.

stt-73 [08.03.2011 09:09:46]

#

Kiitos,omaa huloimattomuuttani.

teksti_ikkuna.pack() siinä pitikin olla.

stt-73 [20.03.2011 22:19:05]

#

Tähän samaan ohjelmaan liittyen kysyisin vielä että miten pystyy määrittämään paikan käyttöliittymässä oleville komponenteille.
Tässä tapauksessa kentta, teksti_ikkuna, lue_nappi, lopeta_nappi
Esim.jos haluaa lue ja lopeta napit aivan liittymän oikeaan reunaa,alareunaan,tai ylös.

jalski [20.03.2011 22:25:39]

#

Tk:n kanssa kannattaa lukea hiukan ohjeita ja tutustua geometria managereihin. Googletappas vaikka grid ja pack.

jalski [20.03.2011 23:55:47]

#

Tk on graafinen kirjasto, mistä pythonin käyttämä Tkinter on vain yksi toteutus. Itse olen käyttänyt vain Infernon Tk-toteutusta, mikä on Tkinteria aika paljon joustavampi ja miellyttävämpi käyttää.

esim. Infernolla käyttöliittymän voisi määrittää yksinkertaisesti taulukollisella stringejä:

# Ikkunan debug-tiedolle käyttöliittymän määritykset.
msg_cfg := array[] of {
   # kehykset
   "frame .msg",
   "frame .msg2",

   # tapahtumaikkuna
   "text .msg.t -width 32h -height 15h -state disabled -yscrollcommand {.msg.scroll set} -bg white",
   "scrollbar .msg.scroll -command {.msg.t yview}",

   # käyttäjälista
   "listbox .msg.l -width 15h -height 15h -state disabled -yscrollcommand {.msg.scroll2 set} -bg white",
   "scrollbar .msg.scroll2 -command {.msg.l yview}",

   # viesti-ikkuna
   "text .msg2.t2 -height 15h -state disabled -yscrollcommand {.msg2.scroll3 set} -bg white",
   "scrollbar .msg2.scroll3 -command {.msg2.t2 yview}",

   # pakkaa ja näytä
   "pack .msg.l -side left -expand 1 -fill both",
   "pack .msg.scroll2 -side left -fill y",
   "pack .msg.t -side left -expand 1 -fill both",
   "pack .msg.scroll -side left -fill y",
   "pack .msg -expand 1 -fill both -padx 5 -pady 5",
   "pack .msg2.t2 -side left -expand 1 -fill both",
   "pack .msg2.scroll3 -side left -fill y",
   "pack .msg2 -expand 1 -fill both -padx 5 -pady 5",
   "pack propagate . 0",
   "update"
};

Tkinterin kanssa homma pelaa hiukan erilailla, mutta idea on silti sama. Eli siis voit pakata nappula kokonaisuudet ja muut härpäkkeet kehyksiin ja sitten pakata nuo kehykset vaikka allekkain.

stt-73 [21.03.2011 19:17:24]

#

Kiitoksia vastauksista


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta