Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 24, 2017 13:39:59

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Передача данных в цикл по щедчку мыши

1.

     def lbmouse (self,event):
        if self.master.fromtask:
            print ('Функция Do выполняется')
    def do (self):
        self.master.fromtask = True
#......
        self.master.fromtask = False
2.
     def lbmouse (self,event):
        if not self.master.fromtask:
            print ('Функция Do выполняется')
    def do (self):
        self.master.fromtask = True
#......
        self.master.fromtask = False
babay - вы меня удивляете

Отредактировано vic57 (Фев. 24, 2017 13:40:51)

Офлайн

#2 Фев. 24, 2017 13:44:36

Babay
Зарегистрирован: 2015-05-11
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача данных в цикл по щедчку мыши

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

[code python][/code]#!/usr/bin/env python3 
# -*- coding: utf-8 -*-

from tkinter import *
import tkinter.simpledialog as simpledialog

class main:
def __init__(self,master):
self.master = root
self.quest = Label(self.master)
self.butt = Button(self.master,text='Do',command=self.do)
self.quest.pack()
self.butt.pack()
self.master.mainloop()


def do (self):
self.quest['text'] = 'Вопрос 1'
a = simpledialog.askinteger('Вопрос 1','Введите число (1 или 3)')
if a == 1:
self.quest['text'] = 'Тогда Вариант 1'
# заполняем список новыми значениями:
a = simpledialog.askinteger('Вопрос 2','Введите число (1 или 2)')
if a == 2:
self.quest['text'] = 'Тогда вариант 1.1'
else:
self.quest['text'] = 'Тогда вариант 1.2'
elif a == 3:
self.quest['text'] = 'Тогда Вариант 2'

root=Tk()
main(root)

Отредактировано Babay (Фев. 24, 2017 13:57:05)

Офлайн

#3 Фев. 24, 2017 13:50:46

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Передача данных в цикл по щедчку мыши

Babay
Может спросите еще какой такой гугл?



Офлайн

#4 Фев. 24, 2017 13:59:13

Babay
Зарегистрирован: 2015-05-11
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача данных в цикл по щедчку мыши

FishHook
BabayМожет спросите еще какой такой гугл?
Гугл слыхал. Я выше код выложил, реализующий функционал с использованием всплывающих окон. В гуглах пишут (ответы разные)) что мне нужно использовать root.after (не помогло) либо создавать новый процесс для функции (в моем случае Do)
Попытаюсь по-другому сформулировать вопрос. Если я делаю текстовую версию программы, то данные получаю через input() - функция реализуется очень просто.
Аналог input () в Tkinter - всплывающие окна - они приостанавливают выполняемую функцию до получения ответа.
Затык возникает, когда подобную функциональность я пытаюсь реализовать в одном окне.

Отредактировано Babay (Фев. 24, 2017 14:02:51)

Офлайн

#5 Фев. 24, 2017 14:50:32

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Передача данных в цикл по щедчку мыши

Babay
Мне нужно каким-то образом в функции Do приостанавливать ее исполнение до очередного щелчка по списку
мне кажеться вам стоит пересмотреть алгоритм работы вашей программы.. потому как так как вы хотите сделать у вас не получиться. input ждет ввода, а листбокс ничего не ждет.
Я бы например создал цепочки вопросов ответов и уже из них вычитывал.

 # -*- coding: utf-8 -*-
from tkinter import *
class main:
    def __init__(self,master):
        self.master = root
        self.master.fromtask = False
        # self.master.fromtask принимает значение True во время выполнения функции Do
        self.quest = Label(self.master)
        self.butt = Button(self.master,text='Do',command=self.do)
        self.varList = Listbox(self.master)
        self.quest.pack()
        self.varList.pack()
        self.butt.pack()
        self.varList.bind('<Double-1>',self.lbmouse)
        # словарь с цепочкой вопросов-ответов
        self.questions = {'Вопрос №1': ['Ответ 1-1', 'Ответ 1-2'],
                          'Ответ 1-1': ['Ответ 1-1-1', 'Ответ 1-1-2'],
                          'Ответ 1-2': ['Ответ 1-2-1', 'Ответ 1-2-2'],
                             }
        # расшифровка вопросов
        self.questionsList = {'Вопрос №1': 'Вопрос №1',
                              'Ответ 1-1': 'тогда Вопрос№ 1-1',
                              'Ответ 1-2': 'тогда Вопрос№ 1-2',
                                 }
        self.master.mainloop()
    def varListClear(self):
        # для периодической очистки списка вариантов
        self.varList.delete(0,END)
    def lbmouse (self,event):
        if self.master.fromtask:
            #Двойной щелчок если ф-ция запущена, иначе фигвам
            print ('Функция Do выполняется')
            nextQuestion = self.getAnswer()
            self.setQuestion(nextQuestion)
    def setQuestion(self, question):  # Вывести текущий вопрос, и варианты ответа
        if question  in self.questions.keys(): # проверяем есть ли вопрос в списке вопросов, если нет тетс окончен
            self.quest['text'] = self.questionsList[question]
            self.varListClear()
            answers = self.questions[question]
            for a in answers:
                self.varList.insert (END,a)
        else:
            self.quest['text'] = question
            self.master.fromtask = False
    def getAnswer(self): #получить ответ,
        sel = self.varList.curselection()
        answer = self.varList.get(sel[0])
        return(answer)
    def do (self):
        self.master.fromtask = True
        self.setQuestion('Вопрос №1')
root=Tk()
main(root)

это очень приминивный пример , показывающий алгоритм, возможно вам стоит использовать таблицы или СУБД для хранения данных вместо словарей.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Фев. 24, 2017 15:04:20)

Офлайн

#6 Фев. 25, 2017 00:44:48

Babay
Зарегистрирован: 2015-05-11
Сообщения: 16
Репутация: +  0  -
Профиль   Отправить e-mail  

Передача данных в цикл по щедчку мыши

PEHDOM, благодарю за совет. Подумаю как изменить алгоритм вопросов.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version