Проблема со 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 шт):

Автор решения: Fox Fox

Этот код, мягко говоря, не код. Это просто огрызок. Ничего вразумительного без фундаментального переписывания здесь не сделать, поэтому, как мне кажется, нет и предложений.

Я могу предоставить Вам полный код небольшого готового приложения (шифрование сообщений), в котором есть поля 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()
→ Ссылка