Как разместить ее по центру экрана
def show_forex_market_form(self, entry=None, read_only=False):
self.clear_frame()
is_edit_mode = entry is not None
main_frame = ttk.Frame(self.content_container, style='Card.TFrame')
main_frame.pack(fill=tk.BOTH, expand=True, padx=20, pady=20)
self.current_frame = main_frame
container = ttk.Frame(main_frame, style="Card.TFrame")
container.pack(pady=20, anchor="center", fill=tk.BOTH, expand=True)
canvas = tk.Canvas(container, bg=DARK_BG)
scrollbar = ttk.Scrollbar(container, orient="vertical", command=canvas.yview)
scrollable_frame = ttk.Frame(canvas)
scrollable_frame.bind("<Configure>", lambda e: canvas.configure(scrollregion=canvas.bbox("all")))
canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
canvas.configure(yscrollcommand=scrollbar.set, bg=DARK_BG)
canvas.bind_all("<MouseWheel>", lambda event: canvas.yview_scroll(-1 if event.delta < 0 else 1, "units"))
canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=True)
scrollbar.pack(side=tk.RIGHT, fill=tk.Y)
center_container = ttk.Frame(scrollable_frame)
center_container.pack(anchor="center", pady=20)
header = ttk.Label(center_container, text="БезнРУБ - Рынок", style='Header.TLabel', font=('Arial', 16, 'bold'))
header.pack(pady=10)
input_frame = ttk.LabelFrame(center_container, text="Основные параметры", style='Card.TFrame')
input_frame.pack(fill=tk.X, pady=5, padx=10)
grid_frame = ttk.Frame(input_frame, style='Card.TFrame')
grid_frame.pack(padx=10, pady=5)
fields = [
("Вид валюты:", 'forex_entry'),
("Сумма:", 'forex_amount_entry'),
("Общая комиссия (%):", 'forex_commission_entry'),
("Комиссия агента 1 (%):", 'forex_commission1_entry'),
("Комиссия агента 2 (%):", 'forex_commission2_entry'),
("Курс Инвестинг:", 'forex_course_entry')
]
for i, (label_text, attr_name) in enumerate(fields):
ttk.Label(grid_frame, text=label_text, style='CardTitle.TLabel').grid(row=i, column=0, sticky='e', padx=5,
pady=5)
entry = ttk.Entry(grid_frame, font=('Arial', 12), width=25, state='normal' if not read_only else 'disabled')
entry.grid(row=i, column=1, padx=5, pady=5)
setattr(self, attr_name, entry)
extra_comm_frame = ttk.Frame(center_container, style='Card.TFrame')
extra_comm_frame.pack(fill=tk.X, pady=5, padx=10)
self.forex_extra_var = tk.IntVar(value=2)
ttk.Radiobutton(extra_comm_frame, text="Нет доп. комиссий", variable=self.forex_extra_var, value=2,
command=self.toggle_forex_extra_fields, style='TRadiobutton').pack(side=tk.LEFT, padx=10)
ttk.Radiobutton(extra_comm_frame, text="Есть доп. комиссии", variable=self.forex_extra_var, value=1,
command=self.toggle_forex_extra_fields, style='TRadiobutton').pack(side=tk.LEFT, padx=10)
self.forex_extra_frame = ttk.LabelFrame(center_container, text="Дополнительные комиссии", style='Card.TFrame')
self.forex_extra_frame.pack(fill=tk.X, pady=5, padx=10)
extra_fields = [
("Комиссия за пп (агент):", 'forex_agent_commission_entry'),
("Комиссия за пп (мы):", 'forex_our_commission_entry'),
("Курс для комиссий:", 'forex_commission_course_entry')
]
for i, (label_text, attr_name) in enumerate(extra_fields):
ttk.Label(self.forex_extra_frame, text=label_text, style='CardTitle.TLabel').grid(row=i, column=0,
sticky='e', padx=5,
pady=5)
entry = ttk.Entry(self.forex_extra_frame, font=('Arial', 12), width=25, state='disabled')
entry.grid(row=i, column=1, padx=5, pady=5)
setattr(self, attr_name, entry)
intermediaries_frame = ttk.LabelFrame(center_container, text="Посредники", style='Card.TFrame')
intermediaries_frame.pack(fill=tk.X, pady=10, padx=10)
select_frame = ttk.Frame(intermediaries_frame, style='Card.TFrame')
select_frame.pack(fill=tk.X, padx=10, pady=5)
ttk.Label(select_frame, text="Выберите посредника:", style='CardTitle.TLabel').pack(side=tk.LEFT, padx=5)
self.intermediary_var = tk.StringVar()
intermediaries = self.load_intermediaries()
intermediary_names = [name for name, _ in intermediaries]
self.intermediary_combobox = ttk.Combobox(select_frame, textvariable=self.intermediary_var,
values=intermediary_names, state="readonly", width=25)
self.intermediary_combobox.pack(side=tk.LEFT, padx=5)
ttk.Button(select_frame, text="Добавить", command=self.add_selected_intermediary,
state='normal' if not read_only else 'disabled').pack(side=tk.LEFT, padx=5)
ttk.Button(intermediaries_frame, text="Создать нового посредника", command=self.add_intermediary,
state='normal' if not read_only else 'disabled').pack(pady=5)
current_frame = ttk.LabelFrame(intermediaries_frame, text="Текущие посредники", style='Card.TFrame')
current_frame.pack(fill=tk.X, padx=10, pady=5)
self.current_intermediaries_frame = ttk.Frame(current_frame, style='Card.TFrame')
self.current_intermediaries_frame.pack(padx=10, pady=5)
self.update_intermediaries_display()
btn_frame_calc = ttk.Frame(center_container, style='Card.TFrame')
btn_frame_calc.pack(pady=15)
self.forex_calc_btn = ttk.Button(btn_frame_calc, text="Рассчитать", command=self.calculate_forex_market,
style='TButton', state='normal' if not read_only else 'disabled')
self.forex_calc_btn.pack()
result_frame = ttk.LabelFrame(center_container, text="Результаты расчета", style='Card.TFrame')
result_frame.pack(fill=tk.BOTH, expand=True, pady=10, padx=10)
self.forex_result_text = tk.Text(result_frame, height=15, font=('Arial', 11), wrap=tk.WORD, padx=10, pady=10,
bg='white', fg='black')
self.forex_result_text.pack(fill=tk.BOTH, expand=True, padx=5, pady=5)
btn_footer_frame = ttk.Frame(main_frame, style='Card.TFrame')
btn_footer_frame.pack(fill=tk.X, pady=10)
footer_center = ttk.Frame(btn_footer_frame, style='Card.TFrame')
footer_center.pack()
if is_edit_mode:
if not read_only:
ttk.Button(footer_center, text="Сохранить изменения", command=lambda: self.save_forex_market(entry),
width=20).pack(side=tk.LEFT, padx=10)
ttk.Button(footer_center, text="Назад в журнал", command=self.show_journal, width=20).pack(side=tk.LEFT,
padx=10)
else:
ttk.Button(footer_center, text="Сохранить в журнал", command=self.save_forex_market, width=20).pack(
side=tk.LEFT, padx=10)
ttk.Button(footer_center, text="Назад", command=self.show_action_buttons, width=20).pack(side=tk.LEFT,
padx=10)
if is_edit_mode:
self.load_forex_edit_data(entry)