Проблема со scrollbar в Python
Мне нужно помочь с правильным добавлением полосы прокрутки в мой код на Python. Прокрутка должна быть горизонтальной. Вот код:
shop = tk.Toplevel()
shop.attributes('-fullscreen', True)
shop.withdraw()
shop['bg'] = '#211E25'
tx = tk.Label(shop, text="test text")
tx.pack()
В конце моего кода уже стоит mainloop()
Ответы (1 шт):
Этот код, мягко говоря, не код. Это просто огрызок. Ничего вразумительного без фундаментального переписывания здесь не сделать, поэтому, как мне кажется, нет и предложений.
Я могу предоставить Вам полный код небольшого готового приложения (шифрование сообщений), в котором есть поля tkinter.Text
, снабжённые полосами прокрутки. Естественно, изменение размеров окна производится корректно, в том числе и полос прокрутки. Написано оно именно для школьника на школьном уровне, я думаю, понять будет несложно.
Итак:
# --------------------------------------------------------------------------
# Шифрование | дешифрование сообщений
# --------------------------------------------------------------------------
import string as string
import tkinter as tkinter
import tkinter.messagebox as messagebox
# Шифрование | дешифрование --------------------
def do_operations(mode):
ok = True
if ok:
v_shift = entries_shift.get().strip()
if not v_shift:
v_shift = 1
else:
try:
v_shift = int(float(v_shift))
except:
messagebox.showerror(
title="Увага!", message="Ключ шифрования/дешифрования задан некорректно!", parent=forms_main)
ok = False
if ok:
if mode == 1:
v_text = texts_message.get("1.0", "end-1c").strip()
if not v_text:
messagebox.showerror(
title="Внимание!", message="Сообщение, которое должно быть зашифровано, не введено!", parent=forms_main)
ok = False
if mode == 2:
v_text = texts_encrypted.get("1.0", "end-1c").strip()
if not v_text:
messagebox.showerror(
title="Внимание!", message="Сообщение, которое должно быть дешифровано, не введено!", parent=forms_main)
ok = False
if ok:
if mode == 1:
ok = messagebox.askyesno(
title="Внимание!", message="Выполнить шифрование?", parent=forms_main, default="no")
elif mode == 2:
ok = messagebox.askyesno(
title="Внимание!", message="Выполнить дешифрование?", parent=forms_main, default="no")
if ok:
# Создание основного алфавита
lst_letters = string.ascii_lowercase+string.ascii_uppercase+"абвгдеёжзийклмнопрстуфхцчшщъыьэюя" + \
"АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"+string.digits+string.punctuation+" "
# Создание алфавита со сдвигом
lst_letters_shift = lst_letters[v_shift % len(lst_letters):]+lst_letters[:v_shift % len(
lst_letters)] if v_shift % len(lst_letters) else lst_letters[1:]+lst_letters[:1]
# Создание таблиц соответствия символов в алфавитах для шифрования и дешифрования
table_cipher = str.maketrans(lst_letters, lst_letters_shift)
table_decipher = str.maketrans(lst_letters_shift, lst_letters)
# Шифрование и дешифрование
if mode == 1:
v_text = v_text.translate(table_cipher)
elif mode == 2:
v_text = v_text.translate(table_decipher)
# Запись результата
if mode == 1:
texts_encrypted.delete(1.0, "end")
texts_encrypted.insert("end", v_text)
if mode == 2:
texts_message.delete(1.0, "end")
texts_message.insert("end", v_text)
# Основная форма --------------------
forms_main = tkinter.Tk()
forms_main.geometry("+10+30")
forms_main.resizable(True, True)
forms_main.minsize(1200, 600)
forms_main.title("Шифрование | дешифрование сообщений")
forms_main.configure(borderwidth=2)
labels_shift = tkinter.Label(master=forms_main, anchor="w", font=(
"Arial", 10), text="Укажите число - ключ шифрувания/дешифрования:")
labels_shift.grid(row=0, column=0, sticky="nswe", padx=1, pady=1)
entries_shift = tkinter.Entry(master=forms_main, font=("Arial", 10))
entries_shift.grid(row=1, column=0, sticky="nswe", padx=1, pady=1)
buttons_cipher = tkinter.Button(master=forms_main, anchor="w", command=lambda: do_operations(
mode=1), font=("Arial", 10), text="Выполнить шифрование")
buttons_cipher.grid(row=1, column=1, sticky="nsw", padx=1, pady=1)
buttons_decipher = tkinter.Button(master=forms_main, anchor="w", command=lambda: do_operations(
mode=2), font=("Arial", 10), text="Выполнить дешифрование")
buttons_decipher.grid(row=1, column=2, sticky="nsw", padx=1, pady=1)
labels_message = tkinter.Label(master=forms_main, anchor="w", font=(
"Arial", 10), text="Текст сообщения:")
labels_message.grid(row=2, column=0, sticky="nswe", padx=1, pady=1)
texts_message = tkinter.Text(master=forms_main, font=(
"Arial", 10), height=2, wrap="none")
texts_message.grid(row=3, column=0, sticky="nswe",
columnspan=3, padx=1, pady=1)
scrollbars_message_y = tkinter.Scrollbar(
master=forms_main, command=texts_message.yview, orient="vertical")
texts_message.configure(yscrollcommand=scrollbars_message_y.set)
scrollbars_message_y.grid(row=3, column=4, sticky="nswe", padx=1, pady=1)
scrollbars_message_x = tkinter.Scrollbar(
master=forms_main, command=texts_message.xview, orient="horizontal")
texts_message.configure(xscrollcommand=scrollbars_message_x.set)
scrollbars_message_x.grid(row=4, column=0, sticky="nswe",
columnspan=3, padx=1, pady=1)
labels_encrypted = tkinter.Label(master=forms_main, anchor="w", font=(
"Arial", 10), text="Зашифрованный текст сообщения:")
labels_encrypted.grid(row=5, column=0, sticky="nswe", padx=1, pady=1)
texts_encrypted = tkinter.Text(
master=forms_main, font=("Arial", 10), height=2, wrap="none")
texts_encrypted.grid(row=6, column=0, sticky="nswe",
columnspan=3, padx=1, pady=1)
scrollbars_encrypted_y = tkinter.Scrollbar(
master=forms_main, command=texts_encrypted.yview, orient="vertical")
texts_encrypted.configure(yscrollcommand=scrollbars_encrypted_y.set)
scrollbars_encrypted_y.grid(row=6, column=4, sticky="nswe", padx=1, pady=1)
scrollbars_encrypted_x = tkinter.Scrollbar(
master=forms_main, command=texts_encrypted.xview, orient="horizontal")
texts_encrypted.configure(xscrollcommand=scrollbars_encrypted_x.set)
scrollbars_encrypted_x.grid(
row=7, column=0, sticky="nswe", columnspan=3, padx=1, pady=1)
v_help = '''Инструкция: для переписки с партнёром с использованием шифрования Вы должны:
1) передать ему эту программу;
2) объяснить, как она работает;
3) сообщить число - ключ шифрования/дешифрования;
4) зашифровать текст своего письма и переслать этот текст ему.'''
labels_help = tkinter.Label(master=forms_main, anchor="w", font=(
"Arial", 10), justify="left", text=v_help)
labels_help.grid(row=8, column=0, sticky="nswe", columnspan=3, padx=1, pady=1)
forms_main.columnconfigure(0, weight=1)
forms_main.rowconfigure(3, weight=1)
forms_main.rowconfigure(6, weight=1)
entries_shift.focus_set()
forms_main.mainloop()