Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Исправьте код на Python с библиотекой Tkinter, проект с использованием двух файлов

Максим Котов Ученик (99), открыт 3 недели назад
Помогите найти ошибку в моём проекте на Python. В проекте два файла: main, main2 . Основной запускаемый файл проекта: main .

Код в main:

 from tkinter import * 
from main2 import Exit2, window2

win2 = Tk()
win2.title("???")
win2.geometry("1600x900")
win2.resizable(width=False, height=False)
win2.configure(bg="black")

window2()

def exit():
exit()
Exit2()

lb = Label(text="Миша самый плохой!!!", font="Helvetica", fg="red", bg="black")
lb.place(x=500, y=30)
lb.pack

def changeText():
lb.configure(text="Вернее, Максим плохой")

bt = Button(text="Нажми сюда", fg="black", bg="red", width=16, command=changeText)
bt.place(x=500, y=10)
bt.pack

def createLabel():
lb2 = Label(text="Нюша плохая птичка!!!", font="Helvetica", fg="red", bg="black")
lb2.place(x=200, y=60)
lb2.pack()

bt2 = Button(text="И сюда нажми!", fg="black", bg="red", width=16, command=createLabel)
bt2.place(x=100, y=30)
bt2.pack()

lb3 = Label(text="Нажми на все кнопки!", font="Helvetica", fg="red", bg="black")
lb3.place(x=600, y=20)
lb3.pack()

win2.mainloop()
и ещё просто исправьте код, не спрашивайте про тексты.

код в main2:
 from tkinter import * 

def Exit2():
exit()

def window2():
win3 = Tk()
win3.title("Нажми на все кнопки!")
win3.geometry("100x100")
win3.resizable(width=False, height=False)
win3.configure(bg="black")

win3.mainloop()

и при запуске программы пишет:
Traceback (most recent call last):
File "d:\pdwaosdnwaindwiadnwaidnwaidn\main.py", line 2, in <module>
from main2 import Exit2, window2
ImportError: cannot import name 'Exit2' from 'main2' (d:\pdwaosdnwaindwiadnwaidnwaidn\main2.py)
5 ответов
Улик Додиков Искусственный Интеллект (107336) 3 недели назад
main

 
from tkinter import *
from main2 import Exit2, window2

win2 = Tk()
win2.title("Главное окно")
win2.geometry("1600x900")
win2.resizable(width=False, height=False)
win2.configure(bg="black")

window2()

def exit_program():
win2.destroy()
Exit2()

lb = Label(win2, text="Миша самый плохой!!!", font="Helvetica", fg="red", bg="black")
lb.pack()

def changeText():
lb.configure(text="Вернее, Максим плохой")

bt = Button(win2, text="Нажми сюда", fg="black", bg="red", width=16, command=changeText)
bt.pack()

def createLabel():
lb2 = Label(win2, text="Нюша плохая птичка!!!", font="Helvetica", fg="red", bg="black")
lb2.pack()

bt2 = Button(win2, text="И сюда нажми!", fg="black", bg="red", width=16, command=createLabel)
bt2.pack()

lb3 = Label(win2, text="Нажми на все кнопки!", font="Helvetica", fg="red", bg="black")
lb3.pack()

win2.mainloop()
main2

 
from tkinter import *

def Exit2():
exit()

def window2():
win3 = Tk()
win3.title("Нажми на все кнопки!")
win3.geometry("100x100")
win3.resizable(width=False, height=False)
win3.configure(bg="black")

win3.mainloop()
Максим Котов Ученик (99) 3 недели назад
не работает
Улик Додиков Искусственный Интеллект (107336) Максим Котов , очень информативно
Дима Скоркин Профи (698) 3 недели назад
Main 1
from tkinter import *
from main2 import Exit2, window2

win2 = Tk()
win2.title("Основное окно")
win2.geometry("1600x900")
win2.resizable(width=False, height=False)
win2.configure(bg="black")

window2()

def exit_app(): # Изменено имя функции
win2.destroy() # Закрытие главного окна
Exit2() # Закрытие дополнительного окна

lb = Label(win2, text="Миша самый плохой!!!", font="Helvetica", fg="red", bg="black")
lb.place(x=500, y=30)
lb.pack() # Исправлено

def changeText():
lb.configure(text="Вернее, Максим плохой")

bt = Button(win2, text="Нажми сюда", fg="black", bg="red", width=16, command=changeText)
bt.place(x=500, y=10)
bt.pack()

def createLabel():
lb2 = Label(win2, text="Нюша плохая птичка!!!", font="Helvetica", fg="red", bg="black")
lb2.place(x=200, y=60)
lb2.pack()

bt2 = Button(win2, text="И сюда нажми!", fg="black", bg="red", width=16, command=createLabel)
bt2.place(x=100, y=30)
bt2.pack()

lb3 = Label(win2, text="Нажми на все кнопки!", font="Helvetica", fg="red", bg="black")
lb3.place(x=600, y=20)
lb3.pack()

win2.mainloop()
Main 2
from tkinter import *

def Exit2():
win3.destroy() # Изменено на destroy для корректного закрытия окна

def window2():
global win3 # Добавлено для доступа к win3 извне функции
win3 = Toplevel() # Изменено на Toplevel для создания дополнительного окна
win3.title("Нажми на все кнопки!")
win3.geometry("100x100")
win3.resizable(width=False, height=False)
win3.configure(bg="black")

win3.mainloop()
Максим Котов Ученик (99) 3 недели назад
Не работает
Mr.Hale Профи (812) 3 недели назад
Main
 from tkinter import * 
import main2

def main():
win2 = Tk()
win2.title("???")
win2.geometry("1600x900")
win2.resizable(False, False)
win2.configure(bg="black")

main2.window2()

lb = Label(win2, text="Миша самый плохой!!!", font="Helvetica", fg="red", bg="black")
lb.pack()

def changeText():
lb.configure(text="Вернее, Максим плохой")

bt = Button(win2, text="Нажми сюда", fg="black", bg="red", width=16, command=changeText)
bt.pack()

def createLabel():
lb2 = Label(win2, text="Нюша плохая птичка!!!", font="Helvetica", fg="red", bg="black")
lb2.pack()

bt2 = Button(win2, text="И сюда нажми!", fg="black", bg="red", width=16, command=createLabel)
bt2.pack()

lb3 = Label(win2, text="Нажми на все кнопки!", font="Helvetica", fg="red", bg="black")
lb3.pack()

win2.mainloop()

if __name__ == "__main__":
main()
main 2
 from tkinter import * 

def window2():
win3 = Toplevel() # Используем Toplevel для создания дочернего окна
win3.title("Нажми на все кнопки!")
win3.geometry("100x100")
win3.resizable(False, False)
win3.configure(bg="black")

win3.mainloop()
Михаил Кирьянов Мудрец (10367) 3 недели назад
накуй тебе exit2 если у него в логике просто одна функция?вот окно это, ниче не менял
Максим Котов Ученик (99) 3 недели назад
Я только новичок и не очень разбираюсь в Tkinter и Python. Поэтому я решил сделать так.
Инспектор Жопидý Просветленный (40000) 3 недели назад
Ошибка возникает из-за того, что функция exit() в Python используется для завершения работы всей программы, а не только для закрытия окна. При импорте из main2 Python пытается найти функцию Exit2, но сталкивается с вызовом exit(), который завершает весь процесс импорта.
Чтобы исправить ошибку, нужно:
1. Изменить имена функций exit и Exit2 на что-то другое, например, close_window и close_window2, чтобы избежать конфликта с встроенной функцией exit().
2. Использовать win3.destroy() для закрытия окна win3.
Вот исправленный код:
main.py:
from tkinter import *
from main2 import close_window2, window2

win2 = Tk()
win2.title("???")
win2.geometry("1600x900")
win2.resizable(width=False, height=False)
win2.configure(bg="black")

window2()

def close_window():
win2.destroy()
close_window2()

lb = Label(win2, text="Миша самый плохой!!!", font="Helvetica", fg="red", bg="black")
lb.pack() # используйте pack() только один раз для каждого виджета

bt = Button(win2, text="Нажми сюда", fg="black", bg="red", width=16, command=lambda: lb.config(text="Вернее, Максим плохой"))
bt.pack()

def createLabel():
lb2 = Label(win2, text="Нюша плохая птичка!!!", font="Helvetica", fg="red", bg="black")
lb2.pack()

bt2 = Button(win2, text="И сюда нажми!", fg="black", bg="red", width=16, command=createLabel)
bt2.pack()

lb3 = Label(win2, text="Нажми на все кнопки!", font="Helvetica", fg="red", bg="black")
lb3.pack()

win2.protocol("WM_DELETE_WINDOW", close_window) # вызов функции при закрытии окна
win2.mainloop()

main2.py:
from tkinter import *

def close_window2():
global win3 # обращаемся к глобальной переменной win3
win3.destroy()

def window2():
global win3 # объявляем win3 как глобальную переменную
win3 = Tk()
win3.title("Нажми на все кнопки!")
win3.geometry("100x100")
win3.resizable(width=False, height=False)
win3.configure(bg="black")
win3.protocol("WM_DELETE_WINDOW", close_window2) # вызов функции при закрытии окна
win3.mainloop()

Изменения:
• Функции exit и Exit2 переименованы в close_window и close_window2.
• В функциях close_window и close_window2 используется win2.destroy() и win3.destroy() соответственно для закрытия окон.
• В main2.py переменная win3 объявлена как глобальная, чтобы к ней можно было обратиться из функции close_window2.
• Использование pack() для позиционирования виджетов ограничено одним разом на виджет.
• Добавлена обработка события закрытия окна с помощью protocol("WM_DELETE_WINDOW", close_window).
Теперь код должен работать корректно и закрывать оба окна без ошибок.
Похожие вопросы