Pack()-Problem
Verfasst: Donnerstag 19. März 2020, 16:27
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.
zur zeit, sieht es so aus:

das frame mit den buttons soll eben auch nach oben links.
ich hoffe, das ist verständlich
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))

das frame mit den buttons soll eben auch nach oben links.
ich hoffe, das ist verständlich
