@kibernetshow

Как вызвать функцию из класса другого файла?

У меня есть 3 файла, main.py, design.py и nick.py. Мне нужно вызвать функцию proba() из в файла nick.py в файл design.py.
main.py:
from PyQt5 import QtWidgets
import sys  # sys нужен для передачи argv в QApplication
import design  # Это наш конвертированный файл дизайна

class ExampleApp(QtWidgets.QMainWindow, design.Ui_MainWindow):
	def __init__(self):
		# Это здесь нужно для доступа к переменным, методам
		# и т.д. в файле design.py
		super().__init__()
		self.setupUi(self)  # Это нужно для инициализации нашего дизайна

def main():
	app = QtWidgets.QApplication(sys.argv)  # Новый экземпляр QApplication
	window = ExampleApp()  # Создаём объект класса ExampleApp
	window.show()  # Показываем окно
	app.exec_()  # и запускаем приложение

if __name__ == '__main__':  # Если мы запускаем файл напрямую, а не импортируем
	main()  # то запускаем функцию main()


design.py:
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'design.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import * 
from PyQt5.QtCore    import *
from PyQt5.QtWidgets import *
from socket import *
import threading
import time
import sys
import nick



class Ui_MainWindow(object):
	def setupUi(self, MainWindow):
		MainWindow.setObjectName("MainWindow")
		MainWindow.resize(812, 403)
		font = QtGui.QFont()
		font.setPointSize(14)
		MainWindow.setFont(font)

		self.centralwidget = QtWidgets.QWidget(MainWindow)
		self.centralwidget.setObjectName("centralwidget")

		self.sendBtn = QtWidgets.QPushButton(self.centralwidget)
		self.sendBtn.setGeometry(QtCore.QRect(-10, 360, 651, 51))
		self.sendBtn.clicked.connect(self.sendSMS)
		self.sendBtn.setAutoDefault(True)
		self.sendBtn.setFont(font)
		self.sendBtn.setObjectName("sendBtn")

		font = QtGui.QFont()
		font.setPointSize(20)

		self.textBrowser = QtWidgets.QTextBrowser(self.centralwidget)
		self.textBrowser.setGeometry(QtCore.QRect(0, 0, 641, 261))
		self.textBrowser.setObjectName("textBrowser")

		self.horizont1 = QtWidgets.QFrame(self.centralwidget)
		self.horizont1.setGeometry(QtCore.QRect(0, 251, 640, 21))
		self.horizont1.setLineWidth(3)
		self.horizont1.setFrameShape(QtWidgets.QFrame.HLine)
		self.horizont1.setFrameShadow(QtWidgets.QFrame.Sunken)
		self.horizont1.setObjectName("horizont1")

		self.area = QScrollArea(self)
		self.area.setWidgetResizable(True)
		self.area.setWidget(self.textBrowser)
		self.area.setGeometry(0, 0, 641, 261)

		self.exitBtn = QtWidgets.QPushButton(self.centralwidget)
		self.exitBtn.setGeometry(QtCore.QRect(640, 360, 181, 51))
		self.exitBtn.clicked.connect(self.close)

		self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
		self.lineEdit.returnPressed.connect(self.sendBtn.click)
		self.lineEdit.setGeometry(QtCore.QRect(0, 260, 641, 101))
		self.lineEdit.setObjectName("lineEdit")
		self.lineEdit.setFocus()
		self.lineEdit.clear()

		font = QtGui.QFont()
		font.setPointSize(16)

		self.exitBtn.setFont(font)
		self.exitBtn.setObjectName("exitBtn")

		self.vert1 = QtWidgets.QFrame(self.centralwidget)
		self.vert1.setGeometry(QtCore.QRect(638, 0, 5, 412))
		self.vert1.setFrameShadow(QtWidgets.QFrame.Raised)
		self.vert1.setLineWidth(0)
		self.vert1.setMidLineWidth(3)
		self.vert1.setFrameShape(QtWidgets.QFrame.VLine)
		self.vert1.setObjectName("vert1")

		self.userList = QtWidgets.QLabel(self.centralwidget)
		self.userList.setGeometry(QtCore.QRect(690, 0, 101, 31))

		font = QtGui.QFont()
		font.setPointSize(12)
		font.setBold(False)
		font.setWeight(50)

		self.userList.setFont(font)
		self.userList.setObjectName("userList")

		self.listWidget = QtWidgets.QListWidget(self.centralwidget)
		self.listWidget.setGeometry(QtCore.QRect(640, 40, 151, 321))
		self.listWidget.setObjectName("listWidget")
		self.listWidget.setStyleSheet("""
			QScrollBar:vertical {              
				border: none;
				background:white;
				width:3px;
				margin: 0px 0px 0px 0px;
			}
			QScrollBar::handle:vertical {
				background: qlineargradient(x1:0, y1:0, x2:1, y2:0,
				stop: 0 rgb(32, 47, 130), stop: 0.5 rgb(32, 47, 130), stop:1 rgb(32, 47, 130));
				min-height: 0px;
			}
			QScrollBar::add-line:vertical {
				background: qlineargradient(x1:0, y1:0, x2:1, y2:0,
				stop: 0 rgb(32, 47, 130), stop: 0.5 rgb(32, 47, 130),  stop:1 rgb(32, 47, 130));
				height: 0px;
				subcontrol-position: bottom;
				subcontrol-origin: margin;
			}
			QScrollBar::sub-line:vertical {
				background: qlineargradient(x1:0, y1:0, x2:1, y2:0,
				stop: 0  rgb(32, 47, 130), stop: 0.5 rgb(32, 47, 130),  stop:1 rgb(32, 47, 130));
				height: 0 px;
				subcontrol-position: top;
				subcontrol-origin: margin;
			}
		""")


		self.horizont1_2 = QtWidgets.QFrame(self.centralwidget)
		self.horizont1_2.setGeometry(QtCore.QRect(0, 351, 640, 21))
		self.horizont1_2.setLineWidth(2)
		self.horizont1_2.setFrameShape(QtWidgets.QFrame.HLine)
		self.horizont1_2.setFrameShadow(QtWidgets.QFrame.Sunken)
		self.horizont1_2.setObjectName("horizont1_2")

		f = open('login.txt', 'r')
		loginAdd = f.read()
		loginAdd = loginAdd.split("♂")
		self.listWidget.addItem("All")
		self.listWidget.addItems(loginAdd)

		MainWindow.setCentralWidget(self.centralwidget)
		self.retranslateUi(MainWindow)
		QtCore.QMetaObject.connectSlotsByName(MainWindow)

	def sendSMS(self):
		mytext = self.lineEdit.text()
		mytextlen = len(mytext)
		if mytextlen >= 1:
			self.lineEdit.clear()
			self.textBrowser.insertPlainText(mytext + "\n")

	def retranslateUi(self, MainWindow):
		f = open('login.txt', 'r')
		login = f.read()
		_translate = QtCore.QCoreApplication.translate
		MainWindow.setWindowTitle(_translate("MainWindow", "Chat: " + login))
		self.sendBtn.setText(_translate("MainWindow", "Отправить сообщение"))
		self.exitBtn.setText(_translate("MainWindow", "Выйти"))
		self.userList.setText(_translate("MainWindow", "User list:"))


nick.py:
import sys
from PyQt5.QtCore import pyqtSlot
from PyQt5.QtWidgets import (QMainWindow, QPushButton, QApplication, QApplication, QWidget, 
	QAction, QLineEdit, QMessageBox)

class Example(QMainWindow):
	def __init__(self):
		super().__init__()
		self.initUI()

	def initUI(self):
		self.btn1 = QPushButton("Ок", self)
		self.btn1.setGeometry(0, 60, 210, 50)
		self.btn1.clicked.connect(self.buttonClicked)
		self.btn1.setStyleSheet('QPushButton {background-color: #1a4780; font-size: 30px; }')

		self.textbox = QLineEdit(self)
		self.textbox.move(0, 0)
		self.textbox.resize(210, 60)
		self.textbox.setStyleSheet('QLineEdit {background-color: #faebd7; font-size: 40px; }')

		self.setFixedSize(210, 110)
		self.setWindowTitle('Авторизация')
		self.show()

	def buttonClicked(self):
		self.auth = self.textbox.text()
		print(self.auth)
		self.close()

	def proba(self):
		self.auth = self.textbox.text()
		print(self.auth)


app = QApplication(sys.argv)
ex = Example()
app.exec_()
  • Вопрос задан
  • 1747 просмотров
Решения вопроса 1
MaxLevs
@MaxLevs
Это не функция, а метод класса nick.Example.
Для вызова нужно:
  1. Создать объект класса nick.Example
    nick_ojb = nick.Example(<some_params_here>)
  2. Вызвать соответствующий метод у полученного объекта
    nick_ojb.proba()


Подробнее: про модульность | про классы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 03:54
1500 руб./за проект
22 нояб. 2024, в 02:56
10000 руб./за проект
22 нояб. 2024, в 00:55
500 руб./за проект