Szukam pytania związanego z problemem tego kodu i nie mogę nic znaleźć. Myślałem, że może ktoś mógł mi pomóc, jeśli opublikuję tutaj moje kłopoty.

Problem z tą klasą jest to, że Stingvar Self.Text_incl nie pojawia się na ekranie. Wprowadziłem druk do testowania, jeśli obiekt został utworzony poprawnie i tak, działa. Niemniej jednak, kiedy dzwonię do Stringvar z obiektu Incl, nie pojawia się na ekranie

Pokażę ci zrzut ekranu okna Tkintera.

Screenshot

class Data_window:

    def __init__(self, index):

        import os
        import sys

        import get_elements
        elements = get_elements.Get_elements(sys.argv[1], index)

        import Tkinter as tk
        self.data_root = tk.Tk()
        self.data_root.geometry("300x200")
        self.data_root.title("Satellite data")

        self.widgets()

        self.data_root.mainloop()

    def widgets(self):

        satellite_data = tk.LabelFrame(self.data_root, text="Satellite")
        satellite_data.grid(column = 0, row = 0, columnspan = 1, rowspan = 1)

        label_name = tk.Label(satellite_data, text="Name")
        label_name.grid(column = 0, row = 0, columnspan = 1, rowspan = 1)

        file_name = tk.Label(satellite_data, text="File")
        file_name.grid(column = 0, row = 1, columnspan = 1, rowspan = 1)

        orbital_data = tk.LabelFrame(self.data_root, text="Orbital elements")
        orbital_data.grid(column = 0, row = 1, columnspan = 1, rowspan = 1)

        label_incl = tk.Label(orbital_data, text="Inclination")
        label_incl.grid(column = 0, row = 0, columnspan = 1, rowspan = 1)

        self.text_incl = tk.StringVar()

        self.text_incl.set("test")

        print self.text_incl.get()

        incl = tk.Label(orbital_data, textvariable = self.text_incl)

        incl.grid(column = 1, row = 0, columnspan = 1, rowspan = 1)
1
Samuel Góngora 14 sierpień 2014, 20:42

2 odpowiedzi

Najlepsza odpowiedź

Jest kilka rzeczy, które mogą przyczynić się do problemu, a może to nie jest jedna, ale połączenie rzeczy. Nie mogę zduplikować problemu, ale zgaduję, że twoja kombinacja opcji nie zezwala na widżety do wzrostu do właściwego rozmiaru, więc część zawartości ramek zostaje wyłączona.

Na przykład, nie dodasz opcji "lepkiej" dla widżetów, więc nie rosną, aby wypełnić przestrzeń przydzieloną do nich wewnątrz ramy. Nie używasz również lepkiej opcji na Labelframes, więc nie będą one również rozszerzyć, aby wypełnić swój obszar w swoim rodzica. Wszystko utknęło tak małe, jak to możliwe.

Nie podajesz rzędów ani kolumn w głównym oknie żadnej wagi, więc ponownie nie rosną ani nie kurczą się. Każda dodatkowa przestrzeń jest używana poza ramkami etykiet.

Jako ogólną zasadę kciuka, gdy używasz siatki prawie zawsze chcesz użyć lepkiej opcji, a zawsze powinieneś dać co najmniej jedną kolumnę i co najmniej jeden wiersz nie zerowy masy.

0
Bryan Oakley 14 sierpień 2014, 18:50

Twoja etykieta została wyświetlona za "nachyleniem" w moich testach. Zmieniłem tę linię

incl.grid(column = 0, row = 1, columnspan = 1, rowspan = 1)

Aby wyświetlić go bezpośrednio poniżej "nachylenie". Podsumowując, twoja etykieta jest tam, po prostu nie widziałeś tego.

Edytuj: Oto zrzut ekranu z mojego komputera:

enter image description here

0
Andrew Johnson 14 sierpień 2014, 17:50