Форум программистов, компьютерный форум, киберфорум
Наши страницы
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
 
инженер1995
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 18
1

Вызов функции

21.07.2019, 20:39. Просмотров 354. Ответов 5

Здравствуйте. У меня есть основное окно, в котором есть кнопка по нажатию которой должно вызываться другое окно - конвертер величин. Конвертер написан в отдельном python файле под именем conv. Как мне запускать файл conv по нажатию кнопки в основном окне ?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.07.2019, 20:39
Ответы с готовыми решениями:

Вызов функции
Господа, не ругайте... почему def add(x, y): return x + y add(1,10) print(add) ...

Kivy. Вызов функции
Не могу вызвать presic() не из main.py, не из main.kv. Хотя когда запускаю через return Root...

Вызов функции из Dll
Помогите пожалуйста решить проблему. Вот код вызывает функцию из под vb.net. Private Declare...

Вызов класса как функции
У меня есть класс, который содержит несколько методов, однако открытых методов нет. Мне нужно...

Вызов функции из .dll с использованием ctypes
Доброго времени суток. Недавно начал изучать python и мой вопрос, наверное, покажется сильно...

5
tooru
422 / 271 / 166
Регистрация: 07.01.2019
Сообщений: 890
21.07.2019, 20:55 2
Цитата Сообщение от инженер1995 Посмотреть сообщение
конвертер величин
Форма конвертера величин должна быть наследником QWidget, на главной форме помещаете элемент Widget, это пустой виджет, При нажатии кнопки создаете форму конвертора величие и присваиваете виджету на главной форме
0
DmFat
115 / 74 / 25
Регистрация: 23.07.2018
Сообщений: 324
22.07.2019, 08:14 3
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
# -*- coding: utf-8 -*-
import sys
 
from PySide2.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
from PySide2.QtCore import Qt
 
 
class Dialog(QWidget):
 
    def __init__(self, parent=None):
        QWidget.__init__(self, parent, Qt.Dialog)
        self.setWindowTitle("Диалоговое окно")
 
        if not parent:
            self.show()
 
class Main(QWidget):
 
    def __init__(self, parent=None):
        QWidget.__init__(self, parent, Qt.Window)
        self.setWindowTitle("Родительское окно")
 
        self.Dialog = Dialog(self)
 
        self.btn1 = QPushButton("Вызвать диалоговое окно", self)
        self.btn1.clicked.connect(self.Dialog.show)
 
        layout = QVBoxLayout(self)
        layout.addWidget(self.btn1)
 
        if not parent:
            self.show()
 
if __name__ == '__main__':
    App = QApplication(sys.argv)
    main = Main()
    sys.exit(App.exec_())
0
инженер1995
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 18
22.07.2019, 10:06  [ТС] 4
Я делал интерфейс основного окна на pyqt5. Не до конца понятно предложенное вами решение

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
import sys
from holod import *
from PyQt5.QtWidgets import QTableWidgetItem
 
 
import math
import conver
 
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QComboBox
from PyQt5.QtGui import QPixmap
 
 
class MyWin(QtWidgets.QMainWindow, QComboBox, QPixmap ):
    def __init__(self, parent = None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
 
        
 
    
 
 
if __name__ == "__main__" :
    app = QtWidgets.QApplication(sys.argv)
    myapp = MyWin()
    myapp.show()
    sys.exit(app.exec_())
Добавлено через 4 минуты
А это код конвертера в отдельном файле. И вот вопрос в том как мне вызывать по нажатию кнопки в основном окне этот файл ?
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import sys
from conv import *
from PyQt5.QtWidgets import QTableWidgetItem
 
 
import math
 
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QComboBox
from PyQt5.QtGui import QPixmap
 
class MyWin(QtWidgets.QMainWindow, QComboBox, QPixmap ):
    def __init__(self, parent = None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.comboBox.addItems(["Выберите параметр", "Градус Цельсия °C","Градус Фаренгейта °F",
        "Градус Кельвина К","Градус Реомюра °R"])
        self.ui.comboBox.activated[str].connect(self.Activated)
 
        
    def Activated(self, datatxt): #температура
        if datatxt == 'Градус Цельсия °C':
            self.Celsius_temperature()
            self.ui.lineEdit_5.textChanged['QString'].connect(self.Celsius_temperature)
        elif datatxt == 'Градус Фаренгейта °F':
            self.Fahrenheit_temperature()
            self.ui.lineEdit_5.textChanged['QString'].connect(self.Fahrenheit_temperature)
        elif datatxt == 'Градус Кельвина К':
            self.Kelvin_temperature()
            self.ui.lineEdit_5.textChanged['QString'].connect(self.Kelvin_temperature)
        elif datatxt == 'Градус Реомюра °R':
            self.Reaumur_temperature()
            self.ui.lineEdit_5.textChanged['QString'].connect(self.Reaumur_temperature)
        else:
            pass
 
    def Celsius_temperature(self):
        try:
            t = float(self.ui.lineEdit_5.text().replace(',', '.'))
 
            C = t
            F = (t*1.8)+32.0
            K = t + 273.15
            Re = t * 0.8
 
            self.ui.lineEdit.setText(str(round(C,2)))
            self.ui.lineEdit_2.setText(str(round(F,2)))
            self.ui.lineEdit_3.setText(str(round(K,2)))
            self.ui.lineEdit_4.setText(str(round(Re,2)))
        except:
            pass
 
    def Fahrenheit_temperature(self):
        try:
            t = float(self.ui.lineEdit_5.text().replace(',', '.'))
 
            C = (t-32.0)/1.8
            F = t
            K = ((t-32.0)/1.8)+273.15
            Re = ((t-32.0)/1.8)*0.8
 
            self.ui.lineEdit.setText(str(round(C,2)))
            self.ui.lineEdit_2.setText(str(round(F,2)))
            self.ui.lineEdit_3.setText(str(round(K,2)))
            self.ui.lineEdit_4.setText(str(round(Re,2)))
        except:
            pass
 
    def Kelvin_temperature(self):
        try:
            t = float(self.ui.lineEdit_5.text().replace(',', '.'))
 
            C = t-273.15
            F = (t-273.15)*1.8+32.0
            K = t
            Re = (t-273.15)*0.8
 
 
            self.ui.lineEdit.setText(str(round(C,2)))
            self.ui.lineEdit_2.setText(str(round(F,2)))
            self.ui.lineEdit_3.setText(str(round(K,2)))
            self.ui.lineEdit_4.setText(str(round(Re,2)))
        except:
            pass
 
    def Reaumur_temperature(self):
        try:
            t = float(self.ui.lineEdit_5.text().replace(',', '.'))
            C = t/0.8
            F = (t/0.8)*1.8+32.0
            K = (t/0.8)+273.15
            Re = t
 
            self.ui.lineEdit.setText(str(round(C,2)))
            self.ui.lineEdit_2.setText(str(round(F,2)))
            self.ui.lineEdit_3.setText(str(round(K,2)))
            self.ui.lineEdit_4.setText(str(round(Re,2)))
        except:
            pas
if __name__ == "__main__" :
    app = QtWidgets.QApplication(sys.argv)
    myapp = MyWin()
    myapp.show()
    sys.exit(app.exec_())
0
DmFat
115 / 74 / 25
Регистрация: 23.07.2018
Сообщений: 324
22.07.2019, 10:26 5
Простите, немного не так прочитал задание.

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
# -*- coding: utf-8 -*-
import sys
 
from PySide2.QtWidgets import QApplication, QMainWindow, QWidget, QVBoxLayout, QPushButton, QLabel
from PySide2.QtCore import Qt, Slot
 
 
 
class Conver(QWidget):
 
    def __init__(self, parent=None):
        QWidget.__init__(self, parent, Qt.Widget)
        self.Label = QLabel("Это дочернее окно.")
 
        layout = QVBoxLayout(self)
        layout.addWidget(self.Label)
 
 
class Main(QMainWindow):
 
    def __init__(self):
        QMainWindow.__init__(self)
        self.setWindowTitle("Главное окно")
 
        widget = QWidget(self, Qt.Widget)
        label = QLabel("Это главное окно.", widget)
        buttonCall = QPushButton("Вызвать %Conver%", widget)
        buttonCall.clicked.connect(self.callConver)
 
        layout = QVBoxLayout(widget)
        layout.addWidget(label)
        layout.addWidget(buttonCall)
 
        self.setCentralWidget(widget)
 
        self.show()
 
    @Slot()
    def callConver(self):
        self.setCentralWidget(Conver(self))
 
if __name__ == '__main__':
    App = QApplication(sys.argv)
    main = Main()
    sys.exit(App.exec_())
Добавлено через 4 минуты
Цитата Сообщение от инженер1995 Посмотреть сообщение
А это код конвертера в отдельном файле. И вот вопрос в том как мне вызывать по нажатию кнопки в основном окне этот файл ?
Если это окно, то оно должно быть типа QWidget, QDialog или прочее, а у вас это окно имеет тип QMainWindow.
0
инженер1995
0 / 0 / 0
Регистрация: 01.12.2018
Сообщений: 18
22.07.2019, 11:01  [ТС] 6
У меня выдает такую ошибку

Traceback (most recent call last):
line 13, in <module>
class Conver(QWidget):
NameError: name 'QWidget' is not defined

Process returned 1 (0x1) execution time : 0.129 s

Добавлено через 23 минуты
Я разобрался с проблемой и решил задачу.
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
import sys
from holod import *
from PyQt5.QtWidgets import QTableWidgetItem
 
 
import math
import conver
 
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QComboBox
from PyQt5.QtGui import QPixmap
 
 
class MyWin(QtWidgets.QMainWindow, QComboBox, QPixmap ):
    def __init__(self, parent = None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.pushButton_2.clicked.connect(self.asd)
 
 
    def asd(self):
        self.panel = conver.MyWin()
        self.panel.show()
 
 
 
if __name__ == "__main__" :
    app = QtWidgets.QApplication(sys.argv)
    myapp = MyWin()
    myapp.show()
    sys.exit(app.exec_())
0
22.07.2019, 11:01
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2019, 11:01

Вызов функции из dll написанной на delphi из python
Импортировал ctypes, подключился к dll. Есть например такая функция: function...

Вызов определенной функции при изменении пользователем текста в ComboBox
Нужно, чтобы когда пользователь изменял item в комбо боксе вызывалась определенная функция (python)

Вызов функции внутри другой функции с передачей локальной переменной по ссылке
Столкнулся с очень с интересной проблемой. Можно ли так делать? #include &lt;iostream&gt; using...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru