Pack()-Problem

Fragen zu Tkinter.
Antworten
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

hi
ich bastel schon seit geraumer zeit daran, den gesamten inhalt von self.spalten_frame immer nacheinander oben links anzeigen zu lassen.
da ich gern xxx.propagate(False) verwenden möchte (höhe ist festgelegt), habe ich dann im unteren teil noch etwas platz für die anzeige einer horizontalen scrollbar, wenn die gebraucht wird, wenn
nicht, soll es einfach leer bleiben.

Code: Alles auswählen

class Datenparameter(tk.Frame):

    def __init__(self, parent, preview_table):
        tk.Frame.__init__(self, parent, bg='pink')
        self.preview_table = preview_table
        # Um die makierten Zellen der Tabelle zu holen...
        # print('Datenparameter', self.preview_table.return_dict())

        self.image_folder = os.path.join(os.getcwd(), "images")

        self.spalten_key = 'Datenspalten'
        self.spalten_values = [['Kurztext ', 'edit_2.ico'],
                               ['Langtext ', 'edit_2.ico'],
                               ['Ordnungszahl ', 'edit_2.ico'],
                               ['Bedarfsposition ', 'edit_2.ico'],
                               ['Menge ', 'edit_2.ico'],
                               ['Einheit ', 'edit_2.ico'],
                               ['Einheitspreis ', 'edit_2.ico'],
                               ['Gesamtpreis ', 'edit_2.ico'],
                               ['Intervall ', 'edit_2.ico'],
                               ['Zusatz_1 ', 'edit_2.ico'],
                               ['Zusatz_2 ', 'edit_2.ico'],
                               ['Zusatz_3 ', 'edit_2.ico'],
                               ['Zusatz_4 ', 'edit_2.ico'],
                               # ['Zusatz_5 ', 'edit_2.ico']
                               ]

        self.spalten_frame = tk.Frame(self,
                                      height=87,
                                      bg='pink',
                                      highlightbackground="lightsteelblue",
                                      highlightcolor="lightsteelblue",
                                      highlightthickness=2
                                      )

        self.spalten_frame.propagate(False)
        self.spalten_lb_frame = tk.Frame(self.spalten_frame, bg='lightgrey')

        self.spalten_canvas = tk.Canvas(self.spalten_frame, bg="pink", bd=1, highlightthickness=1)
        self.spalten_hsbar = ttk.Scrollbar(self.spalten_frame, orient=tk.HORIZONTAL, command=self.spalten_canvas.xview)
        self.spalten_btn_frame = tk.Frame(self.spalten_canvas, bg="grey")

        self.main()

    def main(self):
        self.spalten_frame.pack(fill=tk.X, expand=False)
        self.spalten_lb_frame.pack(fill=tk.X, expand=False)
        tk.Label(self.spalten_lb_frame,
                 text=self.spalten_key + ':',
                 font=('Helvetica', 9, 'bold', 'underline', 'italic'),
                 bg='lightgrey').pack(side=tk.LEFT)

        self.spalten_canvas.pack(padx=2, pady=2)
        self.spalten_hsbar.pack()
        self.spalten_canvas.configure(xscrollcommand=self.spalten_hsbar.set)
        self.spalten_btn_frame.pack(side=tk.LEFT)
        
        for spalten_text, spalten_info in self.spalten_values:
            spalten_img = Image.open(
                self.resource_LAYOUT(os.path.join(self.image_folder, spalten_info))).resize((18, 18))
            spalten_image = ImageTk.PhotoImage(spalten_img)
            spalten_btn = tk.Button(self.spalten_btn_frame,
                                    image=spalten_image,
                                    text=spalten_text,
                                    font=('Consolas', 8),
                                    compound=tk.LEFT)
            spalten_btn.image = spalten_image
            spalten_btn.pack(side=tk.LEFT, padx=4, pady=4)

        self.spalten_canvas.create_window((0, 0), window=self.spalten_btn_frame, anchor=tk.NW)
        self.spalten_btn_frame.update_idletasks()
        spalten_bbox = self.spalten_canvas.bbox(tk.ALL)
        self.spalten_canvas.configure(scrollregion=spalten_bbox,
                                      width=self.spalten_btn_frame.winfo_width(),
                                      height=self.spalten_btn_frame.winfo_height(),
                                      xscrollcommand=lambda mx_f, mx_l:
                                      self.auto_scroll(self.spalten_hsbar, mx_f, mx_l))
zur zeit, sieht es so aus:
Bild
das frame mit den buttons soll eben auch nach oben links.
ich hoffe, das ist verständlich :)
DMD-OS
User
Beiträge: 165
Registriert: Freitag 28. Dezember 2018, 13:52

jo ich habs, thx :)
Antworten