Ответы пользователя по тегу Python
  • Как в Python передавать объекты из одного модуля в другой?

    budda
    @budda Автор вопроса
    методом тыка, решил вот так (может быть криво):
    поскольку функция authorisate возвращает кортеж объектов
    при вызове функции передал вот такой параметр *vk
    id_from_domain = resolvedomain.resolve_domain('lunev_network', *vk)

    в самой функции вместо жестко заданного аргумента получаю кортеж *args, а потом из него извлекаю нужный объект:
    def resolve_domain(domain, *args):
        vk = args[0]
        resolve_domain = vk.resolveScreenName(screen_name=domain)
    Ответ написан
  • Как в Python & tkinter при использовании MVC создать главное окно программы?

    budda
    @budda Автор вопроса
    Разобрался.

    В примере на github показано взаимодействие двух окон, что несколько специфично, обычно большая часть действий выполняется в главном окне программы. Но поскольку там так задумано (в одном окне две кнопки, изменяющие значение лейбла в другом окне) для реализации независимых окон автору пришлось использовать окна Toplevel. Вот немного о них:

    Марк Лутц Программирование на Python том I: Обычно окна Toplevel используются для реализации многооконных интерфейсов, а также модальных и немодальных диалогов. Они сохраняются до тех пор, пока не будут явно закрыты или пока создавшее их приложение не завершит работу.


    Сколько я не пробовал менять параметры передачи ссылки на главное окно ничего не получалось, пока я не обратил внимание на метод root.withdraw() в файле main.py. Не смотря на название, оказалось, что он срывает окно:

    withdraw() Removes the window from the screen (without destroying it). To redraw the window, use deiconify. When the window has been withdrawn, the state method returns “withdrawn”.


    Но в примере он нужен, что бы скрыть пустое нефункциональное окно root, которое заменяют два независимых окна Toplevel. В моем случае - приложение будет однооконное, поэтому если убрать этот метод, то все сразу начинает работать.

    Рабочий файл main.py выглядит так:

    main.py
    from tkinter import *
    from controllers.MainController import Controller
    
    if __name__ == '__main__':
        root = Tk()
        root.title("PyDOE-tk")    
        app = Controller(root)
        root.mainloop()
    Ответ написан
    Комментировать
  • Как в Python & PyQt5 в панель с вкладками подгружать содержимое вкладки из другого класса?

    budda
    @budda Автор вопроса
    получилось связать вот таким образом:

    file main.py
    class MainWindow(QtWidgets.QMainWindow):
        def __init__(self, parent=None):
            QtWidgets.QMainWindow.__init__(self, parent)
            self.factors_tab = FactorsTab()
            self.table_tab = TableTab()
            # Location of objects Main Window
            self.box = QtWidgets.QVBoxLayout()
            self.tabs = QtWidgets.QTabWidget()
            self.tabs.addTab(self.factors_tab, "Factors")
            self.tabs.addTab(self.table_tab, "Table of coding factors")
            # self.tabs.addTab(self.tab3, "Work Table")
            # self.tabs.addTab(self.tab4, "Calculations")
            self.setCentralWidget(self.tabs)
            self.tabs.setElideMode(QtCore.Qt.ElideLeft)
            self.tabs.setCurrentIndex(0)
            self.tabs.setUsesScrollButtons(True)
            self.tabs.setLayout(self.box)
            self.add_menu()
    
    
    file FactorsTabWidget.py
    class FactorsTab(QtWidgets.QTableView):
        def __init__(self):
            QtWidgets.QTableView.__init__(self, parent=None)
            self.label = QtWidgets.QLabel("Select folder, project file name")
            self.vbox = QtWidgets.QVBoxLayout()
            self.vbox.addWidget(self.label)
            self.frame_factors = QtWidgets.QTableView()
    
            self.table = QtGui.QStandardItemModel(0, 2)
            self.lst1 = ['Дискета', 'Бумага для принтера', 'Барабан для принтера']
            self.lst2 = ["10", "3", "10452048"]
            for row in range(0, 3):
                item1 = QtGui.QStandardItem(self.lst1[row])
                item2 = QtGui.QStandardItem(self.lst2[row])
                self.table.appendRow([item1, item2])
            self.table.setHorizontalHeaderLabels(['Factor Name', 'Кол-во'])
            self.frame_factors.setModel(self.table)
    
            self.vbox.addWidget(self.frame_factors)
            self.setLayout(self.vbox)
    Ответ написан
    Комментировать
  • Какие есть хорошие книги по PyQT5, с чего начать учить его?

    На русском лучшая книга: Прохоренок Н. А. Python 3 и PyQt. Разработка приложений
    Купил на litres в эл. виде - там качественный pdf с рабочим оглавлением
    у него к книге есть листинги (нужно скачивать отдельно), там куча примеров именно по PyQt5, а в книге по PyQt4
    Ответ написан
    1 комментарий