Kirjoittaja Aihe: tkinter uusi rivi taulukkoon syöteriviltä  (Luettu 1446 kertaa)

teele

  • Käyttäjä
  • Viestejä: 815
    • Profiili
tkinter uusi rivi taulukkoon syöteriviltä
« : 14.01.21 - klo:18.34 »
Että pääsee tarkistelemaan sitä "kielioppia", josta aikaisemmassa säikeessä oli kysymys, haluttaisiin tehdä vähän gui-tyylinen tkinter-syöterivi.

Tarkoitus olisi, että yksi ihan erillinen paikka (rivi) on sellainen, johon tiedot syötetään, että ne voidaan ensin tarkistaa. Hyväksytyt tiedot pitäisi sitten saada siirrettyä varsinaiseen taulukkoon.

Koodia: [Valitse]
from tkinter import *
from array import *

root = Tk()
root.geometry("600x400")    ## oma lisäys

height = 5
width = 5
cells = {}
for i in range(height): #Rows
    for j in range(width): #Columns
        b = Entry(root)
        b.delete(0, END)
        b.insert(0, (str(( i*height) + (j+1)) )  )
        b.grid(row=i, column=j)
        cells[(i,j)] = b   ## forit toimii, saadaan tulukko ja cells-dictionary

    for j in range(width): ## EI TOIMI, uutta riviä ei saa erillisenä ???????
        b = Entry(root)
        b.insert(0, (str(( 0.333) + (j+1)) )  )
        b.grid(row=10, column=j, sticky = S)

cells[(0,2)].delete(0, END)   ## toimii, solun arvoon pääsee käsiksi
cells[(0,2)].insert(0, 'åååååååååå')   

mainloop()

Ongelma 1: syöterivi pitäisi saada erilleen taulukkoriveistä, että se ei sotkeutuisi taulukkoon

Tulevat "ongelmat": painike, jolla syöterivi siirretään taulukkoon, painike, jolla näkyvää taulukkoa voi kelata riveittäin, oikeat arvothan ovat cells-dictionaryssä, mikä sekään ei ehkä ole tiedon varastointiin hyvä tapa tässä tapauksessa, kun pelkät rivit riittäisivät



« Viimeksi muokattu: 14.01.21 - klo:18.36 kirjoittanut teele »

teele

  • Käyttäjä
  • Viestejä: 815
    • Profiili
Vs: tkinter uusi rivi taulukkoon syöteriviltä
« Vastaus #1 : 15.01.21 - klo:17.28 »
Pitkien nettihakujen jälkeen jotain toiminnallisuutta on koossa

Koodia: [Valitse]
import tkinter
from tkinter import * 
 
root = Tk()

dr = 0   ## display_row
 
L1 = Label(root, text="Syöttöavustin")
L1.grid(row = dr,column=0)
dr = dr + 1 ## asiaotsikko tehty

L1 = Label(root, text="================")
L1.grid(row=dr,column=0)
dr = dr + 1

L1 = Label(root, text="Syöttörivi")
L1.grid(row=dr,column=0)
dr = dr + 1

height = 5  ## scroll_area
width = 5

data_fields = ['nimi', 'pvm', 'summa','laji', 'erä']

for i in range(height): 
  lab = Label(root, text=data_fields[i]) 
  lab.grid(row = dr,column=i)
  ##print(data_fields[i])
dr = dr + 1   ## kenttäotsikot tehty

input_cells = {}  ## tässä syötearvot

for j in range(width):
  ms = StringVar()
  ms.set(str(j) )
  Entry(textvariable=ms).grid(row = dr,column=j, padx=10,pady=10)
  input_cells[(j)] = ms 
dr = dr + 1   ## kenttäotsikot tehty

L1 = Label(root, text="Tallennetut tiedot")
L1.grid(row=dr,column=0)

def save_row():
  print('tallenna painettu')
  for j in range(width):
    data_cells[(0,j)].set(input_cells[(j)].get() )
   
sub_btn=Button(root,text = 'Tallenna', command = save_row)
sub_btn.grid(row=dr,column=4)
dr = dr + 1

data_cells = {}           ## tänne taulukoidut arvot

for i in range(height): 
  ##entry = Entry(textvariable=mystr, 
  ##              state=DISABLED).grid(row=1, column=i, padx=10, pady=10)
  for j in range(width):
    ms = StringVar()
    ms.set(str(i * width + j) )
    Entry(textvariable=ms).grid(row = dr+i,column=j, padx=10,pady=10)
    data_cells[(i,j)] = ms 
  ##dr = dr + 1

mainloop()


Kun uusia rivejä lisätään data_cells hakemistoon (onko oikea termi), jossain vaiheessa sen pitäisi rullata niin, että vanhemmat rivit poistuvat näkyvistä ja uusin tulee päällimmäiseksi.

Luultavasti rullauksen joutuu tekmään näillä tiedoilla rivein uudelleenkirjoittamisen avulla, mutta olisiko tähän valmiimpia ratkaisuja.

Sitten olisi hyvä jotenkin saada näkyvät data_cells -arvot lukituiksi niin, että vain syöterivillä voi kirjoittaa rivejä. Disabled tummentaa näköjään kentän eikä siksi vaikuta käyttökelpoiselta sellaisenaan, jollei tummennusta saa jostain pois päältä.
« Viimeksi muokattu: 15.01.21 - klo:17.48 kirjoittanut teele »