Уведомления

Группа в Telegram: @pythonsu

Уведомления

  • Found 3494 posts.

Центр помощи » задачи » Май 19, 2019 07:46:54

Помогите пожалуйста решить задачи.
Задача 1.

Использовать необходимое количество переменных.
Кило яблок стоит х руб. y копеек
Мы купили m килограмм n грамм
Необходимо подсчитать сколько мы должны заплатить и результат вывести через функцию print()/


Задача 2.
Составить в интерпретаторе Python программу которая:
- просит пользователя ввести целое число и присваивает его переменной num
- просит пользователя ввести множитель для возведения в степень и присваивает его переменной step
- проверяет истинность условия, что введенное пользователем целое число num меньше 100
- если это условие ИСТИННО, то необходимо возвести число num в степень step (напоминаю, возведение в степень осуществляется оператором **) и присвоить результат переменной rezult.
Результат вывести на печать
- если результат проверки ЛОЖЬ, то вывести на печать сообщение: “Введенное вами число > 100”

Задача 3.
Запросить у пользователя два числа.
- Если первое больше второго, то вычислить их разницу и вывести данные на печать.
- Если второе число больше первого, то вычислить их сумму и вывести на печать
- Если оба числа равны, то вывести это значение на печать.
- Постарайтесь использовать только три переменные
Подсказка
- Используйте конструкцию if - elif - else

Задача 4.
Написать программу:
Присвоить переменной number любое число от 0 до 5
присвоить переменной text значение “нет результата”
Используя условные операторы if - elif осуществить проверку:
- если number равен 0 вывести на печать 0
- если number равен 1 вывести на печать 1
- если number равен 2 вывести на печать 2
- если number равен 3 вывести на печать 3
- если number равен 4 вывести на печать 4
- если number равен 5 вывести на печать 5
- если number равен 6 (или любому другому числу вне диапазона 0 - 5) вывести на печать “Ошибка” и “нет результата”

Python для новичков » Скользящее среднее по нескольким условиям » Май 17, 2019 19:00:51

Python (3.6) , windows

надеюсь найдутся знатоки которые смогут помочь)

Имеется такая таблица


 X2          X3  X4  Y   Y1
01.02.2019  1   1   1   
02.02.2019  2   2   0   
02.02.2019  2   3   0   
02.02.2019  2   1   1   
03.02.2019  1   2   1   
04.02.2019  2   3   0   
05.02.2019  1   1   1   
06.02.2019  2   2   0   
07.02.2019  1   3   1   
08.02.2019  2   1   1   
09.02.2019  1   2   0   
10.02.2019  2   3   1   
11.02.2019  1   1   0   
12.02.2019  2   2   1   
13.02.2019  1   3   0   
14.02.2019  2   1   1   
15.02.2019  1   2   1   
16.02.2019  2   3   0   
17.02.2019  1   1   1   
18.02.2019  2   2   0
И в столбце Y1 необходимо посчитать скользящее среднее столбца Y за последние 5 дней, но только с фильтрацией по условию Х3 и Х4. Фильтр равен текущему значению столбцов для текущей строки. Например для строки 04.02.2019 2 3 0 среднее будет равно 0, потому что для нее условию соответствует только строка 02.02.2019 2 3 0

Как это сделать не понимаю, знаю что это будет нечто вроде

filtered_X4 = df.where(condition_1 & condition_2 & condition_3)
Но как задать сами условия condition_1,2,3 не понимаю.

Видел много примеров когда известен фильтр, например

condition_1 = df.isin()
но это не то что мне нужно. В принципе нужно что-то очень похожее на функцию СРЗНАЧЕСЛИМН в экселе)

Как посчитать среднее знаю

df = filtered_X4.shift(1).rolling(window = 999999, min_periods = 1).mean()
, но не могу настроить фильтрацию

Network » GENEVE туннель на mininet » Май 13, 2019 18:18:06

Не знаю, насколько уместно задавать подобный вопрос тут, но вдруг у кого-то был опыт.
Пытаюсь поднять GENEVE туннель на mininet в простой топологии (для начала). Использую следующие команды:

# on host-1
# —————–
sudo ovs-vsctl add-br br0
sudo ovs-vsctl add-br br1
sudo ovs-vsctl add-port br0 eth0
sudo ifconfig eth0 0
sudo ifconfig br0 192.168.5.44/24
sudo ifconfig br1 10.0.0.1/24
sudo ovs-vsctl add-port br1 tun0 – set interface tun0 type=geneve options:remote_ip=192.168.5.45
ping 10.0.0.2

# on host-2
# —————–
sudo ovs-vsctl add-br br0
sudo ovs-vsctl add-br br1
sudo ovs-vsctl add-port br0 eth0
sudo ifconfig eth0 0
sudo ifconfig br0 192.168.5.45/24
sudo ifconfig br1 10.0.0.2/24
sudo ovs-vsctl add-port br1 tun0 – set interface tun0 type=geneve options:remote_ip=192.168.5.44
ping 10.0.0.1

Продолжает возвращать “Host is Unreachable”, что бы не предпринимали: на одной VM, на разных, разные версии OVS (текущая 2.5.5). VxLAN и GRE - без проблем. Может что-то упущено в самом коде?
Буду очень рада любой подсказке!

Python для новичков » Создание веб сервиса с помощью CGI. Динамическое измене страницы при выполнении CGI скрипта » Май 10, 2019 13:48:42

Цель. Создание веб сервиса с помощью CGI. Динамическое измене страницы при выполнении CGI скрипта.
Описание работы программы
1. В данный момент создал приложение которые с помощью веб интерфейса запускает скрипт и передает в него определены параметры.
2. В данный момент страница формируется в тот момент когда скрипт уже отработал.
3. Динамическое имение страницы не происходит

Нужно реализовать
1. Динамическое измене страницы при выполнении CGI скрипта.
2. Программа должна показывать ход выполнения скрипта
3. Вывод информации должен происходит в веб страницу

Код программы
Имя файла start_web_server.py

 # coding: utf8
# Устанавливаем стандартную внешнюю кодировку = utf8
host ="127.0.0.1" #Хост сайта
port = 8000 # Порт сайта
print("Запущен веб сервер "+ str(host)+":"+str(port));
from http.server import HTTPServer, CGIHTTPRequestHandler
server_address = (host, port)
httpd = HTTPServer(server_address, CGIHTTPRequestHandler)
httpd.serve_forever()

Имя файла index.html
 <!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <title>Тест</title>
</head>
<body>
<form action="form.py">
    Введите параметр  <input type="text" name="TEXT_1">
    <input type="submit">
</form>
</body>
</html>

Имя файла form.py
 #!/usr/bin/env python3
# Устанавливаем стандартную внешнюю кодировку = utf8
# coding: utf8
import cgi
import html
import os
form = cgi.FieldStorage()
text1 = form.getfirst("TEXT_1", "не задано")
text1 = html.escape(text1)
print("Content-Type: text/html; charset=utf-8\n")
print("""<!DOCTYPE HTML>
        <html>
        <head>
            <meta charset="utf-8">
            <title>Тест веб сервиса</title>
        </head>
        <body>""")
print("<h1>Запущен скрипт !</h1>")
print("<p>Параметр  {}</p>".format(text1))
import os
os.system("D:\\Start.py")
print("""</body>
        </html>""")

Python для новичков » Как организовать валидатор формы? » Май 10, 2019 12:57:36

подскажите пожалуйста как правильно организовать валидатор полей формы, который соответствовал бы принципу открытости закрытости. ниже привожу код моей попытки, но он плох потому, что при добавлении новых полей в форму, придётся менять уже существующий код(в частности метод check_registration)

 import re
class Validator:
    def __init__(self):
        self.password_min_length = 6
        self.username_max_length = 20
        self.regex_username = "^[A-Za-z0-9]*$"
        self.regex_email = "^[\w\.\+\-]+\@[\w]+\.[a-z]{2,3}$"
    def check_registration(self, form):
        errors_username = self._errors_username(form['username'])
        errors_email = self._errors_email(form['email'])
        errors_passwords = self._errors_passwords(form['password1'], form['password2'])
        errors = []
        errors.extend(errors_username)
        errors.extend(errors_email)
        errors.extend(errors_passwords)
        return errors
    def _errors_email(self, email):
        if bool(re.search(self.regex_email, email)):
            return []
        else:
            return ['Введите корректный email']
    def _errors_username(self, username):
        errors = []
        if len(username) == 0:
            errors.append('Введите имя')
        if len(username) > self.username_max_length:
            errors.append('Имя слишком длинное')
        if not re.match(self.regex_username, username):
            errors.append('Имя содержит недопустимые символы')
        return errors
    def _errors_passwords(self, password1, password2):
        errors = []
        if len(password1) != len(password2):
            errors.append('Пароли не совпадают')
        if len(password1) == 0 and len(password2) == 0:
            errors.append('Пароли не введены')
        elif len(password1) < self.password_min_length or len(password2) < self.password_min_length:
            errors.append('Пароль слишком короткий')
        return errors

Как видите, мой валидатор работает следующим образом:
1. проверки конкретных полей находятся в приватных методах: _errors_email(), _errors_username(), _errors_passwords()
2. эти приватные методы поочерёдно вызываются из метода check_registration()
3. в результате, метод check_registration() для валидной формы возвращает пустой список, а для невалидной формы - список, заполненный сообщениями об ошибках

и вообще, стоит ли заморачиваться? я видел подобный подход в вполне серьёзных проектах. может, быть оставить всё как есть сейчас?

Python для новичков » Цикл по DataFrame » Май 8, 2019 12:17:24

Доброго дня форумчане!

Я пытаюсь взять CSV файл и залить его в БД.
Суть в том что я хотел делать это поэлементно а не всю таблицу сразу и не могу понять как мне организовать цикл по DataFrame.. Чтобы можно было в переменные записать значения каждого столбца и далее делать их INSERT, далее берем следующую строку и делаем тоже самое. Возможно ли такое?
 import pyodbc
import pandas as pd
server = '**********'
database = '*******'
username = '*****'
password = '*****'
driver= '{ODBC Driver 17 for SQL Server}'
cnxn = pyodbc.connect('DRIVER='+driver+';SERVER='+server+';PORT=1433;DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()
df = pd.read_csv('C:\SEpython\m2_20190325.csv',';',encoding='windows-1251')
for index, row in df.iterrows():
    x1 = ?
    x2 = ?
    cursor.execute("INSERT INTO [dbo].[m2_test](doc_id,pin) VALUES (?,?)", (x1,x2))
    cnxn.commit()
Помогите плиз

Python для новичков » На Питоне для Android » Май 7, 2019 18:32:42

Ребята, у кого есть успешный опыт создания на Питоне приложений для Android-а? (создание, подписывание ключом, публикация в Google Play)
Что использовали: kivy или BeeWare

Python для новичков » Ошибка памяти » Май 6, 2019 21:14:51

Возникает ошибка памяти в коде программы байесовского классификатора:
 from sklearn.datasets import fetch_20newsgroups
from pprint import pprint
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import ComplementNB
from sklearn import metrics
import numpy as np
newsgroups_train = fetch_20newsgroups(subset = 'train', remove = ('headers', 'footers', 'quotes'))
newsgroups_test = fetch_20newsgroups(subset = 'test')
print("Число наблюдений в обучающей выборке\n", 
         newsgroups_train.filenames.shape)
print("Число наблюдений в тестовой выборке\n", 
         newsgroups_test.filenames.shape)
print("Список новостных рубрик\n")
pprint(list(newsgroups_train.target_names))
# Приведение данных к document-term матрице
vectorizer = CountVectorizer()
sparse_train = vectorizer.fit_transform(newsgroups_train.data)
sparse_test = vectorizer.transform(newsgroups_test.data)
dense_train = sparse_train.toarray()
dense_test = sparse_test.toarray()
# Размерность данных (в dense и sparse совпадает)
print("Размерность обучающей выборки\n", sparse_train.shape)
print("Размерность тестовой выборки\n", sparse_test.shape)
# Обучение модели и тестирование
clf = ComplementNB(alpha=1)
clf.fit(sparse_train, newsgroups_train.target)
pred = clf.predict(sparse_test)
# Точность классификации
print("Точность классификации – доля верно классифицированных объектов из тестовой выборки \n")
metrics.accuracy_score(newsgroups_test.target, pred, normalize=True)
# Теперь для dense матрицы
clf = ComplementNB(alpha=1)
clf.fit(dense_train, newsgroups_train.target)
pred = clf.predict(dense_test)
# Точность классификации
print("Точность классификации – доля верно классифицированных объектов из тестовой выборки \n")
metrics.accuracy_score(newsgroups_test.target, pred, normalize=True)

 MemoryError                               Traceback (most recent call last)
<ipython-input-6-df2d53e43d0f> in <module>
     24 sparse_test = vectorizer.transform(newsgroups_test.data)
     25 
---> 26 dense_train = sparse_train.toarray()
     27 dense_test = sparse_test.toarray()
     28 
C:\ProgramData\Anaconda3\lib\site-packages\scipy\sparse\compressed.py in toarray(self, order, out)
    945         if out is None and order is None:
    946             order = self._swap('cf')[0]
--> 947         out = self._process_toarray_args(order, out)
    948         if not (out.flags.c_contiguous or out.flags.f_contiguous):
    949             raise ValueError('Output array must be C or F contiguous')
C:\ProgramData\Anaconda3\lib\site-packages\scipy\sparse\base.py in _process_toarray_args(self, order, out)
   1182             return out
   1183         else:
-> 1184             return np.zeros(self.shape, dtype=self.dtype, order=order)
   1185 
   1186 
MemoryError: 
Знаю, что нужно составлять массив по частям, но не знаю, как.

Python для новичков » Перехват вебхука в дискорде » Май 4, 2019 22:56:43

Доброго дня. Делаю дискорд бота и там имеет место вебхук.
         url = 'https://webhook.site/#!/4cf42122-bdea-4d0b-a122-82d26c1c34f9/363f047f-df4a-420f-8851-199b02aa2658'
        jql = 'project = ABC AND issuetype = Bug and assignee = currentUser()'
        encoded_body = json.dumps({
            "name": "webhook",
            "url": url,
            "events": [
                "jira:issue_updated"
            ],
            "JQL": jql,
            "excludeIssueDetails": False
        })
        url = '{}/rest/webhooks/1.0/webhook'.format(self.config['jira']['server'])
        headers = {'Content-type': 'application/json',
                   'Accept': 'application/json',
                   'Content-Encoding': 'utf-8'}
        answer = requests.post(url, auth=(self.config['jira']['user'], self.config['jira']['password']), data=encoded_body, headers=headers )

На тестовый сайт https://webhook.site/ инфо приходит, а вот если заменить на дискордовский канал, то в дискорд ничего не идет. Есть вероятность, что в ответе слишком много символов (больше 2000) либо иные проблемы.

Вопрос, можно ли через бота перехватывать ответ хука, изменять его и соответственно уже отдавать готовый ответ?

Python для новичков » Ошибка NameError: name 'export_all_fbx' is not defined » Май 4, 2019 18:11:49

Ув. программисты,
Я ни разу на питоне не писал, но потребовалось использовать чужой скрипт для 3d редактора.
Ниже сам код
 import bpy
def export_all_fbx(exportFolder):
    objects = bpy.data.objects
    for object in objects:
        bpy.ops.object.select_all(action='DESELECT')
        object.select = True
        exportName = exportFolder + object.name + '.fbx'
        bpy.ops.export_scene.fbx(filepath=exportName, use_selection=True)
При компиляции выдает ошибку NameError: name ‘export_all_fbx’ is not defined.
Я понял, что не объявлена функция export_all_fbx. Подскажите, пожалуйста, как ее правильно объявить.

Python для новичков » Django. Создать суперпользователя » Май 2, 2019 15:37:28

Здравствуйте. Вопрос по джанге.
Имею следующие модели Ссылка на pastebin
не могу создать суперпользователя, так как Planet таблица еще пуста. Создал строку в Planet с id=1. Но получил ошибку Cannot assign “1”: “Candidate.planet” must be a “Planet” instance.
Как правильно в этом случае создавать суперпользователя?

Python для новичков » Бот для ВК » Апрель 30, 2019 22:21:28

Доброго времени суток.
Нужен самописный бот для вк на python.
Суть в том, чтобы бот каждый день смотрел в подписчики группы, формировал список из тех у кого сегодня день рождения и выкладывал пост в группу с изображением и написанным текстом (или в отложенный записи).
Может уже кто то сталкивался с таким или был аналогичный случай))

Django » создание собственного поля модели » Апрель 28, 2019 15:08:13

Всем привет. Я новичок, поэтому не судите строго.
Нужно сделать модель с одним текстовым полем. При чем при обращении к этому полю возвращалось значение поля с добавлением символа “!”
Пытаюсь сделать следующее.
Создал собственное поле:
 
class Myfield(models.Field):
def db_type(self, connection):
return 'field'
def to_python(self, value):
value2 = value + '!'
return str(value2)
создал модель:
class qwer(models.Model):
text = Myfield()
Вроде все логично, но не работает. Значение поле возвращается неизменным.
Что я делаю не так?

GUI » Почему процесс продолжает работу???wx, mainloop не останавливается » Апрель 20, 2019 09:20:26

MainLoop() останавливается после закрытия окна:
import wx


class MyFrame(wx.Frame):
def __init__(self):
super().__init__(None, wx.ID_ANY)

App = wx.App()

MyFrame().Show()

App.MainLoop()
print('в данном случае print работает после закрытия окна')


А здесь нет:
 import wx
class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None, wx.ID_ANY)
        MyDialog()
class MyDialog(wx.Dialog):
    def __init__(self):
        super().__init__(None, wx.ID_ANY)
        self.Show()
App = wx.App()
MyFrame().Show()
App.MainLoop()
print('в данном случае print не работает после закрытия окна')

Я конечно понимаю, что все решается добавлением этой строки в MyFrame
 self.Bind(wx.EVT_CLOSE, lambda event: App.ExitMainLoop())
, но мне просто интересно почему??? Возможно я что-то не так делаю???

Python проекты » поиск специалиста » Апрель 18, 2019 09:28:22

В поиске специалиста (от 2 лета опыта) - Python + PostGreSQL + PostGIS для проекта (1 месяц) в офисе. Москва, Чистые Пруды.

Есть 2 части
1. построение ряд роботов в питоне - собирают данные и координаты магазинов с сайта ритейлеров
2. Автоматизация на постгрес гис процессов

Ссылка на Github и резюме послать по адресу: a.trousset@geomatrix-retail.com
Спасибо!

Mobile Python » Как запустить pdb в pydroid 3 » Апрель 18, 2019 05:00:37

Прошу подсказать, как запустить отладчик pdb в pydroid 3, т.е. каким сочетанием клавиш эмулировать Enter ?
import pdb
pdb.set_trace()

Python для новичков » Проблема выбора компонента в Menubutton » Апрель 13, 2019 20:48:35

Добрый день!
Задача этой части проги: открывается окно -> выбираем dif -> отображается окно для дифференцирования -> нажимаем на “Choose function” и выбираем функцию галочкой ->нажимаем “Chose function” и у нас должна отобразиться выбранная функция и условия к ней (если есть)-> повторяем те же действия и для подфункции

Проблема: когда функцию def dif() прописываем как отдельную программу - всё работает без ошибок (см. фото1). Когда же мы прописываем как функцию def dif() - идёт отображение интерфейса, есть возможность выбора функции в “choose function”, но после нажатия “chose function” ничего не происходит
Буду благодарен за помощь в решении данного вопроса.

 from Tkinter import *
from math import*
def dif():
    zadanie1 = Tk()
    framea= Frame (zadanie1)
    framea.grid(row=0, column=0)
    frameb=Frame (zadanie1, width=400, height=450)
    frameb.grid(row=0, column=1)
    frame1=Frame (framea, width=0, height=10)
    frame1.grid(row=0, column=0)
    frame2=Frame (zadanie1, width=10, height=10)
    frame2.grid(row=3, column=0)
    frame3=Frame (framea, width=10, height=10)
    frame3.grid(row=6, column=1)
    frame4=Frame (framea, width=10, height=10)
    frame4.grid(row=11, column=1)
    frame5=Frame (framea, width=10, height=10)
    frame5.grid(row=6, column=4)
    frame6=Frame (framea, width=10, height=10)
    frame6.grid(row=11, column=4)
    #Начало выбора функции
    F_label = Label(framea, text="Function").grid(row=3, column=0,pady=5)
    f_label = Label(framea, text="")
    f_label.grid(row=3, column=1,pady=5)
    G_label = Label(framea, text="Deritative").grid(row=4, column=0,pady=5)
    g_label = Label(framea, text="")
    g_label.grid(row=4, column=1,pady=5)
    U_label = Label(framea, text="Additional condition \n for function ").grid(row=5, column=0,pady=5)
    u_label = Label(framea, text="")
    u_label.grid(row=5, column=1,pady=5)
    enter_label = Label(framea, text="Enter: ").grid(row=6, column=0,pady=5)
    p_label = Label(frame3, text="")
    p_label.grid(row=0, column=0,pady=5)
    entry=Entry(frame3, width=0)
    entry.grid(row=0, column=1,pady=5)
    
    var=IntVar()
    W=Menubutton(framea,text="Choose function",relief=RAISED)
    W.menu=Menu(W,tearoff=1)
    W['menu']=W.menu
    W.menu.add_radiobutton(label = "t**n", variable = var,value=1)
    W.menu.add_radiobutton(label = "a**t", variable = var,value=2)
    W.menu.add_radiobutton(label = "log(b)t", variable = var,value=3)
    W.menu.add_radiobutton(label = "exp(t)", variable = var,value=4)
    W.menu.add_radiobutton(label = "ln(t)", variable = var,value=5)
    W.menu.add_radiobutton(label = "sin(t)", variable = var,value=6)
    W.menu.add_radiobutton(label = "cos(t)", variable = var,value=7)
    W.menu.add_radiobutton(label = "sqrt(t)", variable = var,value=8)
    W.menu.add_radiobutton(label = "C", variable = var,value=9)
    W.menu.add_radiobutton(label = "tg(t)", variable = var,value=10)
    W.menu.add_radiobutton(label = "ctg(t)", variable = var,value=11)
    W.menu.add_radiobutton(label = "arcsin(t)", variable = var,value=12)
    W.menu.add_radiobutton(label = "arccos(t)", variable = var,value=13)
    W.menu.add_radiobutton(label = "arctg(t)", variable = var,value=14)
    W.menu.add_radiobutton(label = "arcctg(t)", variable = var,value=15)
    W.menu.add_radiobutton(label = "sinh(t) ", variable = var,value=16)
    W.menu.add_radiobutton(label = "cosh(t)", variable = var,value=17)
    W.menu.add_radiobutton(label = "tgh(t)", variable = var,value=18)
    W.menu.add_radiobutton(label = "ctgh(t)", variable = var,value=19)
    W.grid(row=2, column=0)
    #Окончание выбора функции
 
    #Начало выбора подфункции
    F_label2 = Label(framea, text="Function").grid(row=8, column=0,pady=5)
    f_label2 = Label(framea, text="")
    f_label2.grid(row=8, column=1,pady=5)
 
    G_label2 = Label(framea, text="Deritative").grid(row=9, column=0,pady=5)
    g_label2 = Label(framea, text="")
    g_label2.grid(row=9, column=1,pady=5)
 
    U_label2 = Label(framea, text="Additional condition\n for subfunction").grid(row=10, column=0,pady=5)
    u_label2 = Label(framea, text="")
    u_label2.grid(row=10, column=1,pady=5)
 
    enter_label2= Label(framea, text="Enter: ").grid(row=11, column=0,pady=5)
    p_label2 = Label(frame4, text="")
    p_label2.grid(row=0, column=0,pady=5)
    entry2=Entry(frame4, width=0)
    entry2.grid(row=0, column=1,pady=5)
 
    var2=IntVar()
    w=Menubutton(framea,text="Choose subfunction",relief=RAISED)
    w.menu=Menu(w,tearoff=1)
    w['menu']=w.menu
    w.menu.add_radiobutton(label = "x**n", variable = var2,value=1)
    w.menu.add_radiobutton(label = "a**x", variable = var2,value=2)
    w.menu.add_radiobutton(label = "log(b)x", variable = var2,value=3)
    w.menu.add_radiobutton(label = "exp(x)", variable = var2,value=4)
    w.menu.add_radiobutton(label = "ln(x)", variable = var2,value=5)
    w.menu.add_radiobutton(label = "sin(x)", variable = var2,value=6)
    w.menu.add_radiobutton(label = "cos(x)", variable = var2,value=7)
    w.menu.add_radiobutton(label = "sqrt(x)", variable = var2,value=8)
    w.menu.add_radiobutton(label = "C", variable = var2,value=9)
    w.menu.add_radiobutton(label = "tg(x)", variable = var2,value=10)
    w.menu.add_radiobutton(label = "ctg(x)", variable = var2,value=11)
    w.menu.add_radiobutton(label = "arcsin(x)", variable = var2,value=12)
    w.menu.add_radiobutton(label = "arccos(x)", variable = var2,value=13)
    w.menu.add_radiobutton(label = "arctg(x)", variable = var2,value=14)
    w.menu.add_radiobutton(label = "arcctg(x)", variable = var2,value=15)
    w.menu.add_radiobutton(label = "sinh(x) ", variable = var2,value=16)
    w.menu.add_radiobutton(label = "cosh(x)", variable = var2,value=17)
    w.menu.add_radiobutton(label = "tgh(x)", variable = var2,value=18)
    w.menu.add_radiobutton(label = "ctgh(x)", variable = var2,value=19)
    w.grid(row=7, column=0)
    def chose():
        if var.get()==1:
            f_label.config(text="t**n")
            g_label.config(text="n*((t)**(n-1))")
            u_label.config(text="n \n n!=0 \n -n in N, x!=0 \n n !in Z, x>0")
            entry.config(width=0)
            entry.config(width=5)
            p_label.config(text='n')
        if var.get()==2:
            f_label.config(text="a**t")
            g_label.config(text="(a**t)*log(a)")
            u_label.config(text=" a \n a>0 \n a!=1")
            entry.config(width=0)
            entry.config(width=5)
            p_label.config(text='a')
        if var.get()==3:
            f_label.config(text="log(b)t")
            g_label.config(text="1/(t*log(b))")
            u_label.config(text="b \n b>0 \n b!=1")
            entry.config(width=0)
            entry.config(width=5)
            p_label.config(text='b')            
        if var.get()==4:
            f_label.config(text="exp(t)")
            g_label.config(text="exp(t)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')            
        if var.get()==5:
            f_label.config(text="ln(t)")
            g_label.config(text="1/t")
            u_label.config(text="t>0")
            entry.config(width=0)
            p_label.config(text='Nothing')            
        if var.get()==6:
            f_label.config(text="sin(t)")
            g_label.config(text="cos(t)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')                   
        if var.get()==7:
            f_label.config(text="cos(t)")
            g_label.config(text="-sin(t)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')   
        if var.get()==8:
            f_label.config(text="sqrt(t)")
            g_label.config(text="1/(2*sqrt(t)))")
            u_label.config(text="t>0")
            entry.config(width=0)
            p_label.config(text='Nothing')                                              
        if var.get()==9:
            f_label.config(text="C")
            g_label.config(text="0")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==10:
            f_label.config(text="tg(t)")
            g_label.config(text="1/(cos(t)**2)")
            u_label.config(text="t!=n*(pi/2)")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==11:
            f_label.config(text="ctg(x)")
            g_label.config(text=" -1/(sin(t)**2)")
            u_label.config(text="x!=n*pi")
            entry.config(width=0)
            p_label.config(text='Nothing')       
        if var.get()==12:
            f_label.config(text="arcsin(x)")
            g_label.config(text="1/(sqrt(1-(t**2)))")
            u_label.config(text="-1<t<1")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==13:
            f_label.config(text="arccos(x)")
            g_label.config(text="-1/(sqrt(1-(x**2)))")
            u_label.config(text="-1<t<1")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==14:
            f_label.config(text="arctg(x)")
            g_label.config(text="1/(1+t**2)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==15:
            f_label.config(text="arcctg(t)")
            g_label.config(text="-1/(1+t**2)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==16:
            f_label.config(text="sinh(t) ")
            g_label.config(text="cosh(t)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==17:
            f_label.config(text="cosh(t) ")
            g_label.config(text="sinh(t)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==18:
            f_label.config(text="tgh(t) ")
            g_label.config(text="1/(cosh(t)**2)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==19:
            f_label.config(text="ctgh(t) ")
            g_label.config(text="-1/(sinh(t)**2)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')
          
    def chose2():
        if var2.get()==1:
            f_label2.config(text="x**n")
            g_label2.config(text="n*((x)**(n-1))")
            u_label2.config(text="n \n n!=0 \n -n in N, x!=0 \n n !in Z, x>0")
            entry2.config(width=0)
            entry2.config(width=5)
            p_label2.config(text='n')
        if var2.get()==2:
            f_label2.config(text="a**x")
            g_label2.config(text="(a**x)*log(a)")              
            u_label2.config(text=" a \n a>0 \n a!=1")
            entry2.config(width=0)
            entry2.config(width=5)
            p_label2.config(text='a')         
        if var2.get()==3:
            f_label2.config(text="log(b)x")
            g_label2.config(text="1/(x*log(b))")                
            u_label2.config(text="b \n b>0 \n b!=1")
            entry2.config(width=0)
            entry2.config(width=5)
            p_label2.config(text='b')            
        if var2.get()==4:
            f_label2.config(text="exp(x)")
            g_label2.config(text="exp(x)")
            u_label2.config(text="")
            entry2.config(width=0)
            p_label2.config(text='Nothing')            
        if var2.get()==5:
            f_label2.config(text="ln(x)")
            g_label2.config(text="1/x")
            u_label2.config(text="x>0")
            entry2.config(width=0)
            p_label2.config(text='Nothing')           
        if var2.get()==6:
            f_label2.config(text="sin(x)")
            g_label2.config(text="cos(x)")
            u_label2.config(text="")
            entry2.config(width=0)
            p_label2.config(text='Nothing')                    
        if var2.get()==7:
            f_label2.config(text="cos(x)")
            g_label2.config(text="-sin(x)")
            u_label2.config(text="")
            entry2.config(width=0)
            p_label2.config(text='Nothing')   
        if var2.get()==8:
            f_label2.config(text="sqrt(x)")
            g_label2.config(text="1/(2*sqrt(x)))")
            u_label2.config(text="x>0")
            entry2.config(width=0)
            p_label2.config(text='Nothing')                                              
        if var2.get()==9:
            f_label2.config(text="C")
            g_label2.config(text="0")
            u_label2.config(text="")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==10:
            f_label2.config(text="tg(x)")
            g_label2.config(text="1/(cos(x)**2)")
            u_label2.config(text="x!=n*(pi/2)")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==11:
            f_label2.config(text="ctg(x)")
            g_label2.config(text=" -1/(sin(x)**2)")
            u_label2.config(text="x!=n*pi")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==12:
            f_label2.config(text="arcsin(x)")
            g_label2.config(text="1/(sqrt(1-(x**2)))")
            u_label2.config(text="-1<x<1")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==13:
            f_label2.config(text="arccos(x)")
            g_label2.config(text="-1/(sqrt(1-(x**2)))")
            u_label2.config(text="-1<x<1")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==14:
            f_label2.config(text="arctg(x)")
            g_label2.config(text="1/(1+x**2)")
            u_label2.config(text="")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==15:
            f_label2.config(text="arcctg(x)")
            g_label2.config(text="-1/(1+x**2)")
            u_label2.config(text="")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==16:
            f_label2.config(text="sinh(x) ")
            g_label2.config(text="cosh(x)")
            u_label2.config(text="x in radians")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==17:
            f_label2.config(text="cosh(x)")
            g_label2.config(text="sinh(x)")
            u_label2.config(text="x in radians")
            entry2.config(width=0)
            p_label2.config(text='Nothing')                       
        if var2.get()==18:
            f_label2.config(text="tgh(x) ")
            g_label2.config(text="1/(cosh(x)**2)")
            u_label2.config(text="x in radians")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==19:
            f_label2.config(text="ctgh(x) ")
            g_label2.config(text="-1/(sinh(x)**2)")
            u_label2.config(text="x in radians")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
    Button1 = Button(frame2, text="Chose function", width=15, command=chose).grid(row=0, column=0, padx=5)
    Button2 = Button(frame2, text="Chose subfunction", width=15, command=chose2).grid(row=0, column=1, padx=5)
    zadanie1.mainloop()
    
viborf=Tk()
viborftext= Label(viborf, text='Chose task')
viborftext.grid (row=1, column=2)
viborfbutton1= Button (viborf, text='Diff',command=dif)
viborfbutton1.grid(row=2, column= 2, padx=5, pady=5)
viborf.mainloop()

Python для новичков » Проблема выбора компонента в Menubutton » Апрель 13, 2019 20:48:24

Добрый день!
Задача этой части проги: открывается окно -> выбираем dif -> отображается окно для дифференцирования -> нажимаем на “Choose function” и выбираем функцию галочкой ->нажимаем “Chose function” и у нас должна отобразиться выбранная функция и условия к ней (если есть)-> повторяем те же действия и для подфункции

Проблема: когда функцию def dif() прописываем как отдельную программу - всё работает без ошибок (см. фото1). Когда же мы прописываем как функцию def dif() - идёт отображение интерфейса, есть возможность выбора функции в “choose function”, но после нажатия “chose function” ничего не происходит
Буду благодарен за помощь в решении данного вопроса.

 from Tkinter import *
from math import*
def dif():
    zadanie1 = Tk()
    framea= Frame (zadanie1)
    framea.grid(row=0, column=0)
    frameb=Frame (zadanie1, width=400, height=450)
    frameb.grid(row=0, column=1)
    frame1=Frame (framea, width=0, height=10)
    frame1.grid(row=0, column=0)
    frame2=Frame (zadanie1, width=10, height=10)
    frame2.grid(row=3, column=0)
    frame3=Frame (framea, width=10, height=10)
    frame3.grid(row=6, column=1)
    frame4=Frame (framea, width=10, height=10)
    frame4.grid(row=11, column=1)
    frame5=Frame (framea, width=10, height=10)
    frame5.grid(row=6, column=4)
    frame6=Frame (framea, width=10, height=10)
    frame6.grid(row=11, column=4)
    #Начало выбора функции
    F_label = Label(framea, text="Function").grid(row=3, column=0,pady=5)
    f_label = Label(framea, text="")
    f_label.grid(row=3, column=1,pady=5)
    G_label = Label(framea, text="Deritative").grid(row=4, column=0,pady=5)
    g_label = Label(framea, text="")
    g_label.grid(row=4, column=1,pady=5)
    U_label = Label(framea, text="Additional condition \n for function ").grid(row=5, column=0,pady=5)
    u_label = Label(framea, text="")
    u_label.grid(row=5, column=1,pady=5)
    enter_label = Label(framea, text="Enter: ").grid(row=6, column=0,pady=5)
    p_label = Label(frame3, text="")
    p_label.grid(row=0, column=0,pady=5)
    entry=Entry(frame3, width=0)
    entry.grid(row=0, column=1,pady=5)
    
    var=IntVar()
    W=Menubutton(framea,text="Choose function",relief=RAISED)
    W.menu=Menu(W,tearoff=1)
    W['menu']=W.menu
    W.menu.add_radiobutton(label = "t**n", variable = var,value=1)
    W.menu.add_radiobutton(label = "a**t", variable = var,value=2)
    W.menu.add_radiobutton(label = "log(b)t", variable = var,value=3)
    W.menu.add_radiobutton(label = "exp(t)", variable = var,value=4)
    W.menu.add_radiobutton(label = "ln(t)", variable = var,value=5)
    W.menu.add_radiobutton(label = "sin(t)", variable = var,value=6)
    W.menu.add_radiobutton(label = "cos(t)", variable = var,value=7)
    W.menu.add_radiobutton(label = "sqrt(t)", variable = var,value=8)
    W.menu.add_radiobutton(label = "C", variable = var,value=9)
    W.menu.add_radiobutton(label = "tg(t)", variable = var,value=10)
    W.menu.add_radiobutton(label = "ctg(t)", variable = var,value=11)
    W.menu.add_radiobutton(label = "arcsin(t)", variable = var,value=12)
    W.menu.add_radiobutton(label = "arccos(t)", variable = var,value=13)
    W.menu.add_radiobutton(label = "arctg(t)", variable = var,value=14)
    W.menu.add_radiobutton(label = "arcctg(t)", variable = var,value=15)
    W.menu.add_radiobutton(label = "sinh(t) ", variable = var,value=16)
    W.menu.add_radiobutton(label = "cosh(t)", variable = var,value=17)
    W.menu.add_radiobutton(label = "tgh(t)", variable = var,value=18)
    W.menu.add_radiobutton(label = "ctgh(t)", variable = var,value=19)
    W.grid(row=2, column=0)
    #Окончание выбора функции
 
    #Начало выбора подфункции
    F_label2 = Label(framea, text="Function").grid(row=8, column=0,pady=5)
    f_label2 = Label(framea, text="")
    f_label2.grid(row=8, column=1,pady=5)
 
    G_label2 = Label(framea, text="Deritative").grid(row=9, column=0,pady=5)
    g_label2 = Label(framea, text="")
    g_label2.grid(row=9, column=1,pady=5)
 
    U_label2 = Label(framea, text="Additional condition\n for subfunction").grid(row=10, column=0,pady=5)
    u_label2 = Label(framea, text="")
    u_label2.grid(row=10, column=1,pady=5)
 
    enter_label2= Label(framea, text="Enter: ").grid(row=11, column=0,pady=5)
    p_label2 = Label(frame4, text="")
    p_label2.grid(row=0, column=0,pady=5)
    entry2=Entry(frame4, width=0)
    entry2.grid(row=0, column=1,pady=5)
 
    var2=IntVar()
    w=Menubutton(framea,text="Choose subfunction",relief=RAISED)
    w.menu=Menu(w,tearoff=1)
    w['menu']=w.menu
    w.menu.add_radiobutton(label = "x**n", variable = var2,value=1)
    w.menu.add_radiobutton(label = "a**x", variable = var2,value=2)
    w.menu.add_radiobutton(label = "log(b)x", variable = var2,value=3)
    w.menu.add_radiobutton(label = "exp(x)", variable = var2,value=4)
    w.menu.add_radiobutton(label = "ln(x)", variable = var2,value=5)
    w.menu.add_radiobutton(label = "sin(x)", variable = var2,value=6)
    w.menu.add_radiobutton(label = "cos(x)", variable = var2,value=7)
    w.menu.add_radiobutton(label = "sqrt(x)", variable = var2,value=8)
    w.menu.add_radiobutton(label = "C", variable = var2,value=9)
    w.menu.add_radiobutton(label = "tg(x)", variable = var2,value=10)
    w.menu.add_radiobutton(label = "ctg(x)", variable = var2,value=11)
    w.menu.add_radiobutton(label = "arcsin(x)", variable = var2,value=12)
    w.menu.add_radiobutton(label = "arccos(x)", variable = var2,value=13)
    w.menu.add_radiobutton(label = "arctg(x)", variable = var2,value=14)
    w.menu.add_radiobutton(label = "arcctg(x)", variable = var2,value=15)
    w.menu.add_radiobutton(label = "sinh(x) ", variable = var2,value=16)
    w.menu.add_radiobutton(label = "cosh(x)", variable = var2,value=17)
    w.menu.add_radiobutton(label = "tgh(x)", variable = var2,value=18)
    w.menu.add_radiobutton(label = "ctgh(x)", variable = var2,value=19)
    w.grid(row=7, column=0)
    def chose():
        if var.get()==1:
            f_label.config(text="t**n")
            g_label.config(text="n*((t)**(n-1))")
            u_label.config(text="n \n n!=0 \n -n in N, x!=0 \n n !in Z, x>0")
            entry.config(width=0)
            entry.config(width=5)
            p_label.config(text='n')
        if var.get()==2:
            f_label.config(text="a**t")
            g_label.config(text="(a**t)*log(a)")
            u_label.config(text=" a \n a>0 \n a!=1")
            entry.config(width=0)
            entry.config(width=5)
            p_label.config(text='a')
        if var.get()==3:
            f_label.config(text="log(b)t")
            g_label.config(text="1/(t*log(b))")
            u_label.config(text="b \n b>0 \n b!=1")
            entry.config(width=0)
            entry.config(width=5)
            p_label.config(text='b')            
        if var.get()==4:
            f_label.config(text="exp(t)")
            g_label.config(text="exp(t)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')            
        if var.get()==5:
            f_label.config(text="ln(t)")
            g_label.config(text="1/t")
            u_label.config(text="t>0")
            entry.config(width=0)
            p_label.config(text='Nothing')            
        if var.get()==6:
            f_label.config(text="sin(t)")
            g_label.config(text="cos(t)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')                   
        if var.get()==7:
            f_label.config(text="cos(t)")
            g_label.config(text="-sin(t)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')   
        if var.get()==8:
            f_label.config(text="sqrt(t)")
            g_label.config(text="1/(2*sqrt(t)))")
            u_label.config(text="t>0")
            entry.config(width=0)
            p_label.config(text='Nothing')                                              
        if var.get()==9:
            f_label.config(text="C")
            g_label.config(text="0")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==10:
            f_label.config(text="tg(t)")
            g_label.config(text="1/(cos(t)**2)")
            u_label.config(text="t!=n*(pi/2)")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==11:
            f_label.config(text="ctg(x)")
            g_label.config(text=" -1/(sin(t)**2)")
            u_label.config(text="x!=n*pi")
            entry.config(width=0)
            p_label.config(text='Nothing')       
        if var.get()==12:
            f_label.config(text="arcsin(x)")
            g_label.config(text="1/(sqrt(1-(t**2)))")
            u_label.config(text="-1<t<1")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==13:
            f_label.config(text="arccos(x)")
            g_label.config(text="-1/(sqrt(1-(x**2)))")
            u_label.config(text="-1<t<1")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==14:
            f_label.config(text="arctg(x)")
            g_label.config(text="1/(1+t**2)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==15:
            f_label.config(text="arcctg(t)")
            g_label.config(text="-1/(1+t**2)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==16:
            f_label.config(text="sinh(t) ")
            g_label.config(text="cosh(t)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==17:
            f_label.config(text="cosh(t) ")
            g_label.config(text="sinh(t)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==18:
            f_label.config(text="tgh(t) ")
            g_label.config(text="1/(cosh(t)**2)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')
        if var.get()==19:
            f_label.config(text="ctgh(t) ")
            g_label.config(text="-1/(sinh(t)**2)")
            u_label.config(text="")
            entry.config(width=0)
            p_label.config(text='Nothing')
          
    def chose2():
        if var2.get()==1:
            f_label2.config(text="x**n")
            g_label2.config(text="n*((x)**(n-1))")
            u_label2.config(text="n \n n!=0 \n -n in N, x!=0 \n n !in Z, x>0")
            entry2.config(width=0)
            entry2.config(width=5)
            p_label2.config(text='n')
        if var2.get()==2:
            f_label2.config(text="a**x")
            g_label2.config(text="(a**x)*log(a)")              
            u_label2.config(text=" a \n a>0 \n a!=1")
            entry2.config(width=0)
            entry2.config(width=5)
            p_label2.config(text='a')         
        if var2.get()==3:
            f_label2.config(text="log(b)x")
            g_label2.config(text="1/(x*log(b))")                
            u_label2.config(text="b \n b>0 \n b!=1")
            entry2.config(width=0)
            entry2.config(width=5)
            p_label2.config(text='b')            
        if var2.get()==4:
            f_label2.config(text="exp(x)")
            g_label2.config(text="exp(x)")
            u_label2.config(text="")
            entry2.config(width=0)
            p_label2.config(text='Nothing')            
        if var2.get()==5:
            f_label2.config(text="ln(x)")
            g_label2.config(text="1/x")
            u_label2.config(text="x>0")
            entry2.config(width=0)
            p_label2.config(text='Nothing')           
        if var2.get()==6:
            f_label2.config(text="sin(x)")
            g_label2.config(text="cos(x)")
            u_label2.config(text="")
            entry2.config(width=0)
            p_label2.config(text='Nothing')                    
        if var2.get()==7:
            f_label2.config(text="cos(x)")
            g_label2.config(text="-sin(x)")
            u_label2.config(text="")
            entry2.config(width=0)
            p_label2.config(text='Nothing')   
        if var2.get()==8:
            f_label2.config(text="sqrt(x)")
            g_label2.config(text="1/(2*sqrt(x)))")
            u_label2.config(text="x>0")
            entry2.config(width=0)
            p_label2.config(text='Nothing')                                              
        if var2.get()==9:
            f_label2.config(text="C")
            g_label2.config(text="0")
            u_label2.config(text="")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==10:
            f_label2.config(text="tg(x)")
            g_label2.config(text="1/(cos(x)**2)")
            u_label2.config(text="x!=n*(pi/2)")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==11:
            f_label2.config(text="ctg(x)")
            g_label2.config(text=" -1/(sin(x)**2)")
            u_label2.config(text="x!=n*pi")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==12:
            f_label2.config(text="arcsin(x)")
            g_label2.config(text="1/(sqrt(1-(x**2)))")
            u_label2.config(text="-1<x<1")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==13:
            f_label2.config(text="arccos(x)")
            g_label2.config(text="-1/(sqrt(1-(x**2)))")
            u_label2.config(text="-1<x<1")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==14:
            f_label2.config(text="arctg(x)")
            g_label2.config(text="1/(1+x**2)")
            u_label2.config(text="")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==15:
            f_label2.config(text="arcctg(x)")
            g_label2.config(text="-1/(1+x**2)")
            u_label2.config(text="")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==16:
            f_label2.config(text="sinh(x) ")
            g_label2.config(text="cosh(x)")
            u_label2.config(text="x in radians")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==17:
            f_label2.config(text="cosh(x)")
            g_label2.config(text="sinh(x)")
            u_label2.config(text="x in radians")
            entry2.config(width=0)
            p_label2.config(text='Nothing')                       
        if var2.get()==18:
            f_label2.config(text="tgh(x) ")
            g_label2.config(text="1/(cosh(x)**2)")
            u_label2.config(text="x in radians")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
        if var2.get()==19:
            f_label2.config(text="ctgh(x) ")
            g_label2.config(text="-1/(sinh(x)**2)")
            u_label2.config(text="x in radians")
            entry2.config(width=0)
            p_label2.config(text='Nothing')
    Button1 = Button(frame2, text="Chose function", width=15, command=chose).grid(row=0, column=0, padx=5)
    Button2 = Button(frame2, text="Chose subfunction", width=15, command=chose2).grid(row=0, column=1, padx=5)
    zadanie1.mainloop()
    
viborf=Tk()
viborftext= Label(viborf, text='Chose task')
viborftext.grid (row=1, column=2)
viborfbutton1= Button (viborf, text='Diff',command=dif)
viborfbutton1.grid(row=2, column= 2, padx=5, pady=5)
viborf.mainloop()

Python для новичков » Намертво зависает программа » Апрель 12, 2019 14:36:09

Написал чат. После продолжительной отправки сообщений с клиента на сервер окно клиента зависает и не работает.
Сервер
 import socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.bind(('', 9998))
clients = []
while 1:
    data, addr = s.recvfrom(1024)
    if addr not in clients:
        clients.append(addr)
        for x in clients:
            print(x)
            try:
                x.send((addr+' connected').encode())
            except:
                pass
    print(data.decode())

Клиент
 import socket
from tkinter import *
root = Tk()
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.connect(('localhost', 9998))
root.resizable(False, False)
root.geometry('500x500')
def send1(event):
    sock.send(e1.get().encode())
    e1.delete(0, END)
def loop():
    try:
        message = sock.recv()
        t1.insert(message+'\n')
    except:
        root.after(500, loop)
    root.after(500, loop)
t1 = Text(root)
e1 = Entry(root)
t1.configure(state=DISABLED)
e1.bind('<Return>', send1)
t1.pack(side='top', fill='both', expand='true')
e1.pack(side='bottom', fill='x', expand='true')
root.after(500, loop)
root.mainloop()