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

Python. Модуль tkinter. Добавить окно, рассчитывающее периметр и площадь треугольника и квадрата

Виктория Травова Знаток (380), на голосовании 2 недели назад
Помогите, пожалуйста, с доработкой программы. Необходимо создать пятое окно, в котором должны находиться 2 Radiobutton элемента, в одном из которых можно выбрать треугольник, в другом квадрат. Потом появляются рядом элементы Checkbutton, с помощью которых можно посчитать площадь и периметр треугольника или квадрата (в зависимости от того, какая фигура была выбрана). При выборе вывода площади на экран должна выводится площадь, при выборе периметра - периметр. Пользователем должны вводится необходимые размеры фигур для вычисления.
Весь мой код не влез, поэтому дополнительно скинула остаток кода.
 from tkinter import *  
from tkinter import ttk
from tkinter.ttk import Combobox
from tkinter.ttk import Checkbutton
from tkinter.ttk import Radiobutton

lst = []
def simple_numbers (n):#функция нахождения простых чисел
for i in range(1, n+1):
for j in range(2, i):
if i % j == 0:
break
else:
lst.append(i)
x = [0]

def clicked ():#функция счетчика кликов
y = [1]
x[0] += 1
y[0] += 1
z = x[0]
btn_1.configure(text=f'номер клика: {x[0]}\nпростое число: {lst[z - 1]}')
good = '123'

def code():#проверка правильности пароля
if password.get() == good:
txt_2.delete(1.0, END)
txt_2.insert(INSERT, 'Тупить!')
else:
txt_2.delete(1.0, END)
txt_2.insert(INSERT, 'Это неправильный пароль')
password.delete(first=0, last=len(password.get()))

def chkButton():#функция проверки нажатых букв в 3 окне
str = ''
if (chk_state.get()):
str += 'А'
if (chk_state_1.get()):
str += 'Б'
if (chk_state_2.get()):
str += 'В'
if (chk_state_3.get()):
str += 'Г'
if (chk_state_4.get()):
str += 'Д'
lbl_txt.configure(text=str)
def chk_RadioButton():
lbl.configure(text=selected.get())
window = Tk()
window.title("Hello world")
window.geometry('600x600')
tab_control = ttk.Notebook(window)
tab1 = ttk.Frame(tab_control)
tab2 = ttk.Frame(tab_control)
tab3 = ttk.Frame(tab_control)
tab4 = ttk.Frame(tab_control)
tab_control.add(tab1, text='Первое окно')
tab_control.add(tab2, text='Второе окно')
tab_control.add(tab3, text='Третье окно')
tab_control.add(tab4, text='Четвертое окно')

#первое окно
simple_numbers(1000)
btn_1 = Button(tab1, text='0', command=clicked, width='20', height='5')
btn_1.grid(column=0, row=0)

#второе окно
lbl_1 = Label(tab2, text="Введите текст")
lbl_1.grid(column=0, row=0)
txt_1 = Text(tab2, width=30, height=6)
txt_1.insert(INSERT, f'Что все люди умеют делать\nневероятно хорошо?')
txt_1.grid(column=1, row=0)
lbl_2 = Label(tab2, text="Введите пароль")
lbl_2.grid(column=0, row=1)
password = Entry(tab2, width=40)
password.grid(column=1, row=1)
password.focus()
btn_2 = Button(tab2, text="Клик!", command=code, width=34)
btn_2.grid(column=1, row=2)
txt_2 = Text(tab2, width=30, height=1)
txt_2.grid(column=1, row=3)

#третье окно
chk_state = BooleanVar()
chk_state_1 = BooleanVar()
chk_state_2 = BooleanVar()
chk_state_3 = BooleanVar()
chk_state_4 = BooleanVar()
chk = Checkbutton(tab3, text='А', var=chk_state)
chk.grid(column=0, row=0, sticky=W)
chk_1 = Checkbutton(tab3, text='Б', var=chk_state_1)
chk_1.grid(column=0, row=1, sticky=W)
chk_2 = Checkbutton(tab3, text='В', var=chk_state_2)
chk_2.grid(column=0, row=2, sticky=W)
chk_3 = Checkbutton(tab3, text='Г', var=chk_state_3)
chk_3.grid(column=0, row=3, sticky=W)
chk_4 = Checkbutton(tab3, text='Д', var=chk_state_4)
chk_4.grid(column=0, row=4, sticky=W)
Дополнен 1 месяц назад
lbl = Label(tab3, text='Слово, состоящие из выбранных букв:')
lbl.grid(column=0, row=5, sticky=W, columnspan=2)
lbl_txt = Label(tab3, text=' ')
lbl_txt.grid(column=2, row= 5, sticky=W)
btn_2 = Button(tab3, text="Клик!", command=chkButton)
btn_2.grid(column=0, row=6, sticky=W)
tab_control.pack(expand=1, fill="both")

#Четвертое окно
selected = StringVar()
list = [[1,2,3],[4,5,6],[7,8,9]]
tuple = ('Privet', 9, 3.14)
set = {1,2,3,4,'abcd'}
dict = {'key1': 'z1', 'key2': 'z2'}
rad1 = Radiobutton(tab4, text='Список(list)', value=list, variable=selected)
rad1.grid(column=0, row=0, sticky=W)
rad2 = Radiobutton(tab4, text='Кортеж(tuple)', value=tuple, variable=selected)
rad2.grid(column=0, row=1, sticky=W)
rad3 = Radiobutton(tab4, text='Множество(set)', value=set, variable=selected)
rad3.grid(column=0, row=2, sticky=W)
rad4 = Radiobutton(tab4, text='Словарь(dict)', value=dict, variable=selected)
rad4.grid(column=0, row=3, sticky=W)
btn = Button(tab4, text="Клик", command=chk_RadioButton)
btn.grid(column=0, row=4, sticky=W)
lbl_txt_1 = Label(tab4, text="Пример: ")
lbl.grid(column=1, row=4, sticky=W)
lbl = Label(tab4)
lbl.grid(column=2, row=4, sticky=W)
window.mainloop()
Голосование за лучший ответ
Татьяна Просветленный (32838) 1 месяц назад
так место тут уже нет чтобы его опубликовать




Рабочий код можно скачать тут
https:// inlnk.ru/goVQ3j
Виктория ТравоваЗнаток (380) 1 месяц назад
Одобрите доступ для этого аккаунта, пожалуйста: sokolovaveronika154@gmail.com
Татьяна Просветленный (32838) Виктория Травова, сек зайду
ТатьянаПросветленный (32838) 1 месяц назад
сделала доступ
Виктория ТравоваЗнаток (380) 1 месяц назад
Спасибо большое!
Виктория ТравоваЗнаток (380) 1 месяц назад
Можете, пожалуйста, подсказать, как сделать так, чтобы при выборе квадрата скрывались элементы для ввода сторон b и c?
Татьяна Просветленный (32838) Виктория Травова, Чтобы скрыть элементы для ввода сторон b и c при выборе квадрата, вам нужно настроить их видимость в функции calculate(), в зависимости от выбранной фигуры. Вот как вы можете это сделать:
Виктория ТравоваЗнаток (380) 1 месяц назад
Спасибо!
Виктория ТравоваЗнаток (380) 1 месяц назад
Вы не могли бы еще, пожалуйста, дополнить этот код, в котором используется PyQT5, чтобы после успешной регистрации в окне "добро пожаловать", можно было точно так же рассчитать площадь и периметр треугольника или квадрата? Необходимо реализовать такие же элементы, как и в программе с модулем tkinter. Только дополнительно нужно сделать так, чтобы при снятии выделения с элементов выбора периметра или площади при расчете окно вывода ответов очищалось. И также необходимо скрывать элементы для ввода сторон b и c при выборе квадрата. Отдельно сейчас код свой отправлю
Виктория ТравоваЗнаток (380) 1 месяц назад
 #!/usr/bin/python3 
# -*- coding: utf-8 -*-

import sys
from PyQt5.QtWidgets import (QWidget, QPushButton, QLineEdit, QInputDialog, QApplication, QMessageBox, QLabel, QVBoxLayout, QErrorMessage)
user = {"veronika": "1234"}
userItems = user.items()
class AnotherWindow(QWidget):
def __init__(self):
super().__init__()
layout = QVBoxLayout()
self.label = QLabel("Добро пожаловать")
layout.addWidget(self.label)
self.setLayout(layout)
self.setGeometry(600, 500, 500, 300)
self.setWindowTitle("ВКонтакте")
Виктория ТравоваЗнаток (380) 1 месяц назад
 class AnotherWindow2(QWidget): 
def __init__(self):
super().__init__()
layout1 = QVBoxLayout()
self.label = QLabel("Добро пожаловать")
layout1.addWidget(self.label)
self.setLayout(layout1)
self.setGeometry(600, 500, 500, 300)
self.setWindowTitle("ВКонтакте")

class MainWindow(QWidget):

def __init__(self):
super().__init__()
self.w = None
self.z = None
self.btn = QPushButton('Авторизация ', self)
self.btn.move(145, 50)
self.btn.clicked.connect(self.authorization)

self.btn1 = QPushButton('Регистрация ', self)
self.btn1.move(145, 100)
self.btn1.clicked.connect(self.registration)
Виктория ТравоваЗнаток (380) 1 месяц назад
self.setGeometry(800, 400, 390, 200)
self.setWindowTitle('ВКонтакте')
self.show()

def authorization(self):
print(user)
self.w = None
name1, ok3 = QInputDialog.getText(self, 'Авторизация', 'Введите логин:')
password1, ok4 = QInputDialog.getText(self, 'Авторизация', 'Введите пароль:')
if ok4:
x = False
self.w = None
self.z = None
Виктория ТравоваЗнаток (380) 1 месяц назад
         self.setGeometry(800, 400, 390, 200) 
self.setWindowTitle('ВКонтакте')
self.show()

def authorization(self):
print(user)
self.w = None
name1, ok3 = QInputDialog.getText(self, 'Авторизация', 'Введите логин:')
password1, ok4 = QInputDialog.getText(self, 'Авторизация', 'Введите пароль:')
if ok4:
x = False
self.w = None
self.z = None
Виктория ТравоваЗнаток (380) 1 месяц назад
             while x == False: 
if (name1, password1) in userItems:
x = True
if self.z is None:
self.z = AnotherWindow2()
self.z.label.setText("Добро пожаловать, " + name1)
self.z.show()

else:
error = QMessageBox.critical(self, "Ошибка", "Неправильный логин или пароль!")
break
Виктория ТравоваЗнаток (380) 1 месяц назад
     def registration(self): 
name, ok2 = QInputDialog.getText(self, 'Регистрация', 'Введите логин:')
if name in user:
error = QMessageBox.critical(self, "Ошибка", "Пользователь c таким именем уже существует")
else:
password, ok1 = QInputDialog.getText(self, 'Регистрация', 'Введите пароль:')
password2, ok0 = QInputDialog.getText(self, 'Регистрация', 'Повторите пароль:')
if ok0:
self.z = None
self.w = None
Виктория ТравоваЗнаток (380) 1 месяц назад
                 y = False 
while y == False:
if password == password2:
if (name, password) not in userItems:
user[name] = password
print(user)
y = True
if self.w is None:
self.w = AnotherWindow()
self.w.label.setText("Добро пожаловать, "+name)
self.w.show()
else:
error = QMessageBox.critical(self,"Ошибка", "Пользователь уже существует")
break
Виктория ТравоваЗнаток (380) 1 месяц назад
  
else:
password = QInputDialog.getText(self, 'Регистрация', 'Введите еще раз пароль:')
password2 = QInputDialog.getText(self, 'Регистрация', 'Повторите пароль:')
app = QApplication(sys.argv)
ex = MainWindow()
sys.exit(app.exec_())
Виктория ТравоваЗнаток (380) 1 месяц назад
https://drive.google.com/file/d/1QiIrIaT_7Z9RZDYWHFjoKgLQLIGadr6T/view?usp=sharing
Вот ссылка на документ с этим кодом
Татьяна Просветленный (32838) Виктория Травова, https://drive.google.com/file/d/17RTrGTwljVKcLobKJIvfdbXC3IrC1H49/view?usp=sharing
ТатьянаПросветленный (32838) 1 месяц назад
сделала все что просила тебе
Похожие вопросы