Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/47: Рейтинг темы: голосов - 47, средняя оценка - 4.98
0 / 0 / 0
Регистрация: 29.11.2013
Сообщений: 88

Вызов переменной из одного класса в другом

28.05.2018, 16:02. Показов 9061. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день!

Прошу помощи у знающих людей.
Передо мной стоит задача разработки unit-тестов для задач и разработка графического интерфейса. Графический интерфейс должен состоять из списка задач с чек-боксами и кнопки "Запуск". Чек-бокс True - запустить тестирование задачи, False - не тестировать задачу.

Модульные тесты я написал, интерфейс я знаю как сделать, но есть проблема с ООП Питона.
Проблема вот в чем:
Для запуска тестов есть класс test_runner. Он достаточно стандартный. Просто накидываю в него тесты.
Python
1
2
3
4
5
6
testSuite = unittest.TestSuite()
        testSuite.addTest(unittest.makeSuite(_1_test_SecondMax.TestsSecondMax))
        # testSuite.addTest(unittest.makeSuite(_2_test_KingMove.TestsKingMove))
 
        runner = unittest.TextTestRunner(verbosity=2)
        runner.run(testSuite)
В условиях отладки оставил один тест.

И есть класс с интерфейсом. Там же находится мейн.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
from tkinter import *
import test_runner
from tkinter import Tk, Frame, Checkbutton
from tkinter import BooleanVar, BOTH
 
# varTest1 = bool
class Interface(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.parent = parent
        self.initUI()
 
    def initUI(self):
        self.parent.title("Модульное тестирование задач")
        self.pack(fill=BOTH, expand=True)
        self.var = BooleanVar()
 
        cbTest1 = Checkbutton(self, text="1_test_SecondMax", variable=self.var, command=self.onCBTest1)
        cbTest1.grid(row=0, column=0, sticky='w')
 
        # Кнопка "Запуск"
        buttonStart = Button(self, width=10, text="Запуск")
        buttonStart.bind("<Button-1>", self.btnStartTests)
        buttonStart.grid(row=22, column=4, sticky='s')
 
 
    def onCBTest1(self):
        if self.var.get() == True:
            # varTest1 = self.var.get()
            print("True", self.var.get())
        else:
            # varTest1 = self.var.get()
            print("False", self.var.get())
 
 
    def btnStartTests(self, event):
        test_runner.TestsRunner.run(self)
 
def main():
    root = Tk()
    root.geometry("600x800")
    app = Interface(root)
    root.mainloop()
 
if __name__ == '__main__':
    main()
В переменной "var" хранится состояние чек-бокса. Мне теперь нужно передать это состояние в test_runner, чтобы сказать: если var = True, то добавить тесты в запуск. Если False, то не добавлять.
Передать значение переменной "var" в другой класс у меня не получается. Что я только не делал. И геттеры создавал, и глобальные переменные в обоих классах... Ничего не выходит. Помогите, пожалуйста, советом, что нужно сделать, чтобы передать наконец этот var.

Интерфейс выглядит примерно так:
[IMG]inerface.png[/IMG]
Миниатюры
Вызов переменной из одного класса в другом  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.05.2018, 16:02
Ответы с готовыми решениями:

Вывод значения переменной в label из одного класса в другом
Доброго времени суток. Используя tkinter пишу программу с интерфейсом для курсовой работы. В общем, ситуация такова: В классе Main в...

Вызов метода одного класса в другом классе
Привет всем Когда запускаю, то в методе GetOut() вместо имени человека выводится цифра 1 Помогите пожалуйста, заранее спасибо. ...

Использование переменной одного класса в другом
Нужно передать переменную number в класс Isclick из класса SpriteSwapper public class SpriteSwapper : MonoBehaviour { public...

4
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
28.05.2018, 21:19
Лучший ответ Сообщение было отмечено NSTR как решение

Решение

Проблема в том, что TestsRunner существует только в функции btnStartTests,чтобы с ним можно было работать в других функциях его надо сделатьь полем класса в __init__ что-то вроде

Python
1
self.runner = test_runner.TestsRunner()
1
0 / 0 / 0
Регистрация: 29.11.2013
Сообщений: 88
29.05.2018, 03:04  [ТС]
ТабуретY, работает! Спасибо
Но у меня еще такой вопрос:
Мне нужно передать теперь результаты тестирования из test_runner в interface и вывести их.
Создаю поле в test_runner
Python
1
self.inter = interface.Interface()
а он мне в ответ
TypeError: __init__() missing 1 required positional argument: 'parent'

Очевидно, что ругается на параметр конструктора
Как в таком случае быть?
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
29.05.2018, 05:01
Так не сработает, так как форма уже создана и даже если вы создадите в классе TestsRunner новый объект класса Interface, то это будет другой обьект не связанный с формой, лучше в классе TestRunner создать поле self.test_results = [] и заполнять его результатами тестов, а в классе Interface можно сделвть так

Python
1
2
def btnStartTests(self, event):
        lst_result = self.runner.test_results
1
0 / 0 / 0
Регистрация: 29.11.2013
Сообщений: 88
30.05.2018, 02:07  [ТС]
ТабуретY, получилось
Спасибо огромное!=)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
30.05.2018, 02:07
Помогаю со студенческими работами здесь

Как обратиться к переменной из одного класса в другом?
Я уже видел множество таких обсуждений, но в каждом случае чего-то другое. Не могу решить, как мне либо достать переменную из другого...

Как использовать значение переменной из одного класса в другом?
Есть у меня класс package maps { import flash.display.MovieClip; import flash.events.Event; public class Level_1...

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

Вызов метода класса в лямбде-функции, вызываемой в другом методе этого же класса
Здравствуйте. Помогите грамотно передать в лямбду метод класса. Упрощенно. Есть класс. В одном методе этого класса вызывается...

Вызов переменной в другом методе
Здравствуйте! 2 кнопки на форме - одна выбирает файл в проводнике - другая его запускает. В последствии - хочу еще поле, для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru