Tkinter frame s posuvníky – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Tkinter frame s posuvníky – Python – Fórum – Programujte.comTkinter frame s posuvníky – Python – Fórum – Programujte.com

 

Dolajo
~ Anonymní uživatel
8 příspěvků
21. 7. 2016   #1
-
0
-

Ahoj, prosím o radu. Potřebuju mít rolovací oblast která obsahuje tabulku a checkboxy. Na fórech jsem se dočetl že v tkinter to jde dělat přes canvas. Dal jsem se tedy do programování a výsledek je níže. Problém je, že frame který sdružuje vše uvnitř nevyplní celý canvas (červená plocha). Hledal jsem jak to odstranit a narazil jsem pouze na jeden návod zde kde je ale vše OOP což jde mimo mne. Obracím se proto zde o radu co a jak upravit, případně jak to udělat jinak. Díky za případné rady.

from tkinter import *
import tkinter.ttk as ttk


HlavniOkno=Tk()

HlavniOkno.columnconfigure(0,weight=1)
HlavniOkno.rowconfigure(0,weight=1)
HlavniOkno.geometry("500x500")

OknoVstup=ttk.LabelFrame(HlavniOkno,text="Podokno")
OknoVstup.grid(row=0,column=0,sticky=N+S+E+W)
OknoVstup.columnconfigure(0,weight=1)
OknoVstup.rowconfigure(0,weight=1)

PosuvnikY=Scrollbar(OknoVstup)
PosuvnikY.grid(row=0,column=1,sticky=N+S)

PosuvnikX=Scrollbar(OknoVstup,orient="horizontal")
PosuvnikX.grid(row=1,column=0,sticky=E+W)

OknoOblast=Frame(OknoVstup)
OknoOblast.grid(row=0,column=0,sticky=N+S+E+W)
OknoOblast.columnconfigure(0,weight=1)
OknoOblast.rowconfigure(0,weight=1)

Kontejner=Canvas(OknoOblast,background="red",yscrollcommand=PosuvnikY.set,xscrollcommand=PosuvnikX.set)
Kontejner.grid(row=0,column=0,sticky=N+S+E+W)

PosuvnikY.config(command=Kontejner.yview)
PosuvnikX.config(command=Kontejner.xview)

OknoKontejner=Frame(Kontejner)
OknoKontejner.grid(row=0,column=0,sticky=N+S)
OknoKontejner.rowconfigure(1,weight=1)

NazvyBodu=["casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc"]

OknoPouzitProBf=LabelFrame(OknoKontejner,text="Použít")
OknoPouzitProBf.grid(row=0,column=0,sticky=E+W)

Tabulka=ttk.Treeview(master=OknoKontejner,columns=NazvyBodu,show='headings')
Tabulka.grid(row=1,column=0,sticky=N+S)

SlovnikPouzitProBf=dict()

for i in range(len(NazvyBodu)):
    SlovnikPouzitProBf[i]=IntVar()
    Checkbutton(OknoPouzitProBf,text="",variable=SlovnikPouzitProBf[i]).grid(row=0,column=i,stick=E+W)
    Tabulka.heading(i,text=NazvyBodu[i])
    OknoPouzitProBf.columnconfigure(i,weight=1)

Okno=Kontejner.create_window(0,0,anchor=N+W,window=OknoKontejner)

OknoKontejner.update_idletasks()

Kontejner.config(scrollregion=Kontejner.bbox("all"))


HlavniOkno.mainloop() 
Nahlásit jako SPAM
IP: 81.30.243.–
gcx110
Návštěvník
3. 8. 2016   #2
-
0
-

#1 Dolajo
Asi je už dost pozdě, ale pokusil jsem se to tam přidat z toho objektového. Tkinter je postavený na funkcionálním programování a dá se tak používat, ale obvykle z toho vznikne super prasárna, když tak někdo píše GUI. Nakonec se mi to snad povedlo rozšifrovat a zkopírovat ty funkce.

#!/usr/bin/env python3
from tkinter import *
import tkinter.ttk as ttk

def FrameWidth(event):
    canvas_width = event.width
    Kontejner.itemconfig(Okno, width = canvas_width)

def OnFrameConfigure(event):
    Kontejner.configure(scrollregion=Kontejner.bbox("all"))

HlavniOkno=Tk()

HlavniOkno.columnconfigure(0,weight=1)
HlavniOkno.rowconfigure(0,weight=1)
HlavniOkno.geometry("500x500")

OknoVstup=ttk.LabelFrame(HlavniOkno,text="Podokno")
OknoVstup.grid(row=0,column=0,sticky=N+S+E+W)
OknoVstup.columnconfigure(0,weight=1)
OknoVstup.rowconfigure(0,weight=1)

PosuvnikY=Scrollbar(OknoVstup)
PosuvnikY.grid(row=0,column=1,sticky=N+S)

PosuvnikX=Scrollbar(OknoVstup,orient="horizontal")
PosuvnikX.grid(row=1,column=0,sticky=E+W)

OknoOblast=Frame(OknoVstup)
OknoOblast.grid(row=0,column=0,sticky=N+S+E+W)
OknoOblast.columnconfigure(0,weight=1)
OknoOblast.rowconfigure(0,weight=1)

Kontejner=Canvas(OknoOblast,background="red",yscrollcommand=PosuvnikY.set,xscrollcommand=PosuvnikX.set)
Kontejner.grid(row=0,column=0,sticky=N+S+E+W)

PosuvnikY.config(command=Kontejner.yview)
PosuvnikX.config(command=Kontejner.xview)

OknoKontejner=Frame(Kontejner)
OknoKontejner.grid(row=0,column=0,sticky=N+S)
OknoKontejner.rowconfigure(1,weight=1)

NazvyBodu=["casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc","casasc"]

OknoPouzitProBf=LabelFrame(OknoKontejner,text="Použít")
OknoPouzitProBf.grid(row=0,column=0,sticky=E+W)

Tabulka=ttk.Treeview(master=OknoKontejner,columns=NazvyBodu,show='headings')
Tabulka.grid(row=1,column=0,sticky=N+S)

SlovnikPouzitProBf=dict()

for i in range(len(NazvyBodu)):
    SlovnikPouzitProBf[i]=IntVar()
    Checkbutton(OknoPouzitProBf,text="",variable=SlovnikPouzitProBf[i]).grid(row=0,column=i,stick=E+W)
    Tabulka.heading(i,text=NazvyBodu[i])
    OknoPouzitProBf.columnconfigure(i,weight=1)

Okno=Kontejner.create_window(0,0,anchor=N+W,window=OknoKontejner)

OknoKontejner.update_idletasks()

Kontejner.config(scrollregion=Kontejner.bbox("all"))
Kontejner.bind('<Configure>', FrameWidth)
OknoOblast.bind("<Configure>", OnFrameConfigure)


HlavniOkno.mainloop() 
Nahlásit jako SPAM
IP: 46.23.54.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 3 hosté

Podobná vlákna

Frame a Jframe — založil Herm

Ekvivalent pro frame — založil josefff

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý