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