Ubuntu Suomen keskustelualueet
Ubuntun käyttö => Ohjelmointi, palvelimet ja muu edistyneempi käyttö => Aiheen aloitti: teele - 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.
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
-
Pitkien nettihakujen jälkeen jotain toiminnallisuutta on koossa
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ä.