Создание многооконного приложения в customtkinter

Итак, я работал над приложением, используя «customtkinter», и хотел знать, можно ли создать многооконное приложение?

когда я искал об этом, единственным методом, который я нашел, было «окно верхнего уровня», но проблема в том, что я не хочу создавать новое окно, мне нужно несколько видов «слоев», думаю, вы могли бы сказать в приложении, как я хочу все должно быть на экране, например, нет нового окна - скажем, приложение, поэтому я хочу, чтобы окно входа в систему появлялось при запуске после входа в систему или регистрации. Я не хочу, чтобы открывалось новое окно. Я хочу, чтобы содержимое приложения отображалось в том же окне. как и любое обычное приложение в настоящее время на мобильных устройствах или ПК, возможно ли это в пользовательском tkinter на Python или нет?? если это не так, может кто-нибудь подсказать, какой язык или программное обеспечение мне следует использовать для этого. Я искал реакцию и узел, реакцию на родную среду, а также студию Android и т. д., которую мне следует использовать, если это невозможно в Python.

Предоставьте достаточно кода, чтобы другие могли лучше понять или воспроизвести проблему.

Community 12.04.2024 16:20
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
249
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это можно сделать. Ниже приведен пример программы, содержащей три пользовательских окна tkinter. Первый имеет поле для ввода имени. Второе окно имеет поле для ввода адреса. и кнопка. после ввода имени и адреса при нажатии кнопки имя и адрес отобразятся в третьем окне.

Отредактировано: я отредактировал комментарий ОП в этом посте. Пожалуйста, поймите, что мой ответ - только дать представление о ваших требованиях. Расширьте это своей собственной идеей для дальнейших требований. Если вам вообще нужно какое-то конкретное решение, укажите это в самом вопросе.

import customtkinter as ct

def getdata(e):
    got_name = name_entry.get()
    got_address = address_entry.get()
    if got_name == '': name_entry.focus_force()
    elif got_address == '':address_entry.focus_force()
    else:
        first_line.configure(text = got_name)
        second_line.configure(text = got_address)
    



root = ct.CTk()
root.geometry('400x300+100+100')
name = ct.CTkLabel(root, text = 'Name')
name.pack()

name_entry = ct.CTkEntry(root)

name_entry.pack()



window = ct.CTk()
window.geometry('400x300+500+0')

address =ct.CTkLabel(window, text='Address')
address.pack()

address_entry = ct.CTkEntry(window)
address_entry.pack()



name_entry.bind('<Leave>',getdata)
address_entry.bind('<Leave>', getdata)

wnd= ct.CTk()
wnd.geometry('400x300+900+0')

first_line = ct.CTkLabel(wnd,text='')
first_line.pack()
second_line = ct.CTkLabel(wnd,text='')
second_line.pack()

root.mainloop()

Я хотел спросить, в приведенном выше коде нет кнопки для получения данных, введенных в виджет ввода «Имя»?

MTSAGA 12.04.2024 19:15

я не знаю, мой ли это компьютер или что-то еще, но код работает точно так же, все еще нет выбора, кроме виджета ввода имени, что мне делать после ввода имени в виджете, я больше ничего не вижу ??

MTSAGA 13.04.2024 13:21
Ответ принят как подходящий

Чтобы создать приложение с несколькими страницами/слоями, у вас есть два способа решить эту проблему:

  1. Каждый раз, когда вы хотите показать новую страницу, вы уничтожаете каждый виджет в окне, прежде чем размещать новые, например (win — это корневое окно):
# Destroying every widget
for widget in win.winfo_children():
    widget.destroy()

# Creating new widgets
label = CTkLabel(win, text = "I'm on a new page")
label.pack()
  1. Решение, которое я использую (возможно, более сложное, но позволяет легче вернуться к предыдущим страницам): создать класс для каждой страницы и создать методы show() и hide() для каждого класса. Каждый раз, когда вы хотите сменить страницу, вы вызываете метод hide() каждой страницы и метод show() страницы, которую хотите показать. Например:
from customtkinter import *

win = CTk()
win.geometry("300x300")


def hide_all():
    """ Hides all the pages """
    page1.hide()
    page2.hide()


def show_page1():
    page1.show()


def show_page2():
    page2.show()


class Page1:
    def __init__(self):
        self.label1 = CTkLabel(win, text = "I'm on the first page")
        self.button1 = CTkButton(win, text = "Change to the second page", command=show_page2)

    def show(self):
        hide_all()
        self.label1.pack()
        self.button1.pack()

    def hide(self):
        self.label1.pack_forget()
        self.button1.pack_forget()


class Page2:
    def __init__(self):
        self.label1 = CTkLabel(win, text = "I'm on the second page")
        self.button1 = CTkButton(win, text = "Change to the first page", command=show_page1)

    def show(self):
        hide_all()
        self.label1.pack()
        self.button1.pack()

    def hide(self):
        self.label1.pack_forget()
        self.button1.pack_forget()


page1 = Page1()
page2 = Page2()

page1.show()

win.mainloop()

Надеюсь, я вам помог, хорошего дня

На самом деле я знал первый метод, однако второй для меня новый и кажется более подходящим для моего проекта. Спасибо, братан, ОЧЕНЬ ЦЕНЮ, ЧТО ВЫ НАШЛИ ВРЕМЯ НА СОЗДАНИЕ ПРОЕКТА, А ТАКЖЕ ОТВЕТ НА МОЙ ВОПРОС, СПАСИБО !!!

MTSAGA 13.04.2024 13:47

Нет проблем :D, получайте удовольствие от программирования

fastattack 14.04.2024 11:17

Другие вопросы по теме