Pyqt5 Pythonで別のウィンドウを開いてユーザー入力を取得する方法

Saurabh:

pyqt5を使用してGUIを作成しようとしています。押しボタン付きのメインウィンドウが1つあります。プッシュボタンをクリックすると、姓と名を入力する入力フォームがある別のウィンドウが開きます。以下は私のコードです。別のウィンドウを開くことはできますが、開いたウィンドウの詳細を送信して[詳細の送信]ボタンをクリックしても、何も起こりません。

Main_UiでChild_uiを直接呼び出すと、PrintInput関数からの出力を表示できますが、クラスでuiファイルを変換しても同じことが起こりません。

Main_ui.py:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
     def setupUi(self, MainWindow):
         MainWindow.setObjectName("MainWindow")
         MainWindow.resize(299, 148)
         self.centralwidget = QtWidgets.QWidget(MainWindow)
         self.centralwidget.setObjectName("centralwidget")
         self.pushButton = QtWidgets.QPushButton(self.centralwidget)
         self.pushButton.setGeometry(QtCore.QRect(90, 70, 75, 23))
         self.pushButton.setObjectName("pushButton")
         MainWindow.setCentralWidget(self.centralwidget)
    
         self.retranslateUi(MainWindow)
         QtCore.QMetaObject.connectSlotsByName(MainWindow)  

     def retranslateUi(self, MainWindow):
         _translate = QtCore.QCoreApplication.translate
         MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
         self.pushButton.setText(_translate("MainWindow", "Register user"))

if __name__ == "__main__":
   import sys
   app = QtWidgets.QApplication(sys.argv)
   MainWindow = QtWidgets.QMainWindow()
   ui = Ui_MainWindow()
   ui.setupUi(MainWindow)
   MainWindow.show()
   sys.exit(app.exec_())

このQt設計ファイルをクラスファイルに変換しました。

Main.py:

from PyQt5 import QtCore, QtGui, QtWidgets
from Main_ui import *
from Child import *

class Main(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
        self.pushButton.clicked.connect(self.openChild)

    def openChild(self):
        self.child = QtWidgets.QMainWindow()
        self.ui = userRegistation()
        self.ui.setupUi(self.child)
        self.child.show()   

if __name__ == "__main__":
   import sys
   app = QtWidgets.QApplication(sys.argv)
   MainWindow = QtWidgets.QMainWindow()
   ui = Main()
   ui.setupUi(MainWindow)
   MainWindow.show()
   sys.exit(app.exec_())

以下は、私のChild_ui.py qtデザイナースクリプトです。

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_ChildWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(284, 141)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(20, 30, 71, 16))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(20, 60, 71, 16))
        self.label_2.setObjectName("label_2")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(20, 100, 251, 23))
        self.pushButton.setObjectName("pushButton")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(100, 30, 171, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(100, 60, 171, 20))
        self.lineEdit_2.setObjectName("lineEdit_2")       
        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "First Name"))
        self.label_2.setText(_translate("MainWindow", "Last Name"))
        self.pushButton.setText(_translate("MainWindow", "Submit"))



if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Child.py:Child_ui.pyのクラスファイル

from PyQt5 import QtCore, QtGui, QtWidgets
from Child_ui import *

class userRegistation(QtWidgets.QMainWindow, Ui_ChildWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
    
        self.pushButton.clicked.connect(self.PrintInput)

    def PrintInput(self):
        print (self.lineEdit.text())
        print (self.lineEdit_2.text())
    
S.ニック:

それを試してみてください:

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_ChildWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(284, 141)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(20, 30, 71, 16))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(20, 60, 71, 16))
        self.label_2.setObjectName("label_2")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(20, 100, 251, 23))
        self.pushButton.setObjectName("pushButton")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(100, 30, 171, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(100, 60, 171, 20))
        self.lineEdit_2.setObjectName("lineEdit_2")       
        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "First Name"))
        self.label_2.setText(_translate("MainWindow", "Last Name"))
        self.pushButton.setText(_translate("MainWindow", "Submit"))


#from Main_ui import Ui_MainWindow
class Ui_MainWindow(object):
     def setupUi(self, MainWindow):
         MainWindow.setObjectName("MainWindow")
         MainWindow.resize(299, 148)
         self.centralwidget = QtWidgets.QWidget(MainWindow)
         self.centralwidget.setObjectName("centralwidget")
         self.pushButton = QtWidgets.QPushButton(self.centralwidget)
         self.pushButton.setGeometry(QtCore.QRect(90, 70, 75, 23))
         self.pushButton.setObjectName("pushButton")
         MainWindow.setCentralWidget(self.centralwidget)
    
         self.retranslateUi(MainWindow)
         QtCore.QMetaObject.connectSlotsByName(MainWindow)  

     def retranslateUi(self, MainWindow):
         _translate = QtCore.QCoreApplication.translate
         MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
         self.pushButton.setText(_translate("MainWindow", "Register user"))

         
#from Child import *
class UserRegistation(QtWidgets.QMainWindow, Ui_ChildWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
    
        self.pushButton.clicked.connect(self.PrintInput)

    def PrintInput(self):
        print (self.lineEdit.text())
        print (self.lineEdit_2.text())


class Main(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
        
        self.pushButton.clicked.connect(self.openChild)

    def openChild(self):
#        self.child = QtWidgets.QMainWindow()
        self.ui = UserRegistation()                            # <---
#        self.ui.setupUi(self.ui) # (self.child)
#        self.child.show()   
        self.ui.show()                                         # <---
        

if __name__ == "__main__":
   import sys
   app = QtWidgets.QApplication(sys.argv)
#   MainWindow = QtWidgets.QMainWindow()
   ui = Main()                                                 # <---
#   ui.setupUi(MainWindow)
   ui.show()                                                   # <---
   sys.exit(app.exec_())

ここに画像の説明を入力してください


..はい、それは機能しており、私はこの方法でそれを行うこともできました。2つの異なるファイルを使用して実行します。また、Qtデザイナーでロジックを記述したくないので、Qtデザイナーで変更を行うと、スクリプト全体を変更する必要があります。

更新

Main.py

from PyQt5 import QtCore, QtGui, QtWidgets
from Main_ui import Ui_MainWindow
from Child import UserRegistation


class Main(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
        
        self.pushButton.clicked.connect(self.openChild)

    def openChild(self):
#        self.child = QtWidgets.QMainWindow()
        self.ui = UserRegistation()                            # <---
#        self.ui.setupUi(self.ui) # (self.child)
#        self.child.show()   
        self.ui.show()                                         # <---
        

if __name__ == "__main__":
   import sys
   app = QtWidgets.QApplication(sys.argv)
#   MainWindow = QtWidgets.QMainWindow()
   ui = Main()                                                 # <---
#   ui.setupUi(MainWindow)
   ui.show()                                                   # <---
   sys.exit(app.exec_())

Main_ui.py

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
     def setupUi(self, MainWindow):
         MainWindow.setObjectName("MainWindow")
         MainWindow.resize(299, 148)
         self.centralwidget = QtWidgets.QWidget(MainWindow)
         self.centralwidget.setObjectName("centralwidget")
         self.pushButton = QtWidgets.QPushButton(self.centralwidget)
         self.pushButton.setGeometry(QtCore.QRect(90, 70, 75, 23))
         self.pushButton.setObjectName("pushButton")
         MainWindow.setCentralWidget(self.centralwidget)
    
         self.retranslateUi(MainWindow)
         QtCore.QMetaObject.connectSlotsByName(MainWindow)  

     def retranslateUi(self, MainWindow):
         _translate = QtCore.QCoreApplication.translate
         MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
         self.pushButton.setText(_translate("MainWindow", "Register user"))

Child.py

from PyQt5 import QtCore, QtGui, QtWidgets
from Child_ui import Ui_ChildWindow

class UserRegistation(QtWidgets.QMainWindow, Ui_ChildWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setupUi(self)
    
        self.pushButton.clicked.connect(self.PrintInput)

    def PrintInput(self):
        print (self.lineEdit.text())
        print (self.lineEdit_2.text())

Child_ui.py

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_ChildWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(284, 141)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(20, 30, 71, 16))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setGeometry(QtCore.QRect(20, 60, 71, 16))
        self.label_2.setObjectName("label_2")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(20, 100, 251, 23))
        self.pushButton.setObjectName("pushButton")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(100, 30, 171, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setGeometry(QtCore.QRect(100, 60, 171, 20))
        self.lineEdit_2.setObjectName("lineEdit_2")       
        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "First Name"))
        self.label_2.setText(_translate("MainWindow", "Last Name"))
        self.pushButton.setText(_translate("MainWindow", "Submit"))

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

PyQt5のinstallEventFilter

分類Dev

PyQt5のFocusReason?

分類Dev

PyQt5とPythonでのユーザー入力の検証

分類Dev

PyQT5の開発

分類Dev

背景を回転PYQT5

分類Dev

pyqt5 override dropEvent python

分類Dev

PyQt5のどのGstreamer?

分類Dev

readthedocsとPyQt5のautodoc

分類Dev

WPFStackPanelと同等のPyQt5

分類Dev

PyQt5 の QWebEngineView と QWidget

分類Dev

PyQT5のGridLayoutとVerticalLayout

分類Dev

how to upgrade from pyqt4 to pyqt5 in python

分類Dev

Pyqt5 QtMultimediaでサウンドを再生する方法

分類Dev

Pythonでpyqt5を使用してメインウィンドウのツールバーにQSliderを追加する方法

分類Dev

新しいウィンドウを閉じて開くPYQT5

分類Dev

PyQt5 QMainWindow を最初のウィンドウとしてフォーカス

分類Dev

PyQt5でQlabelを削除する方法

分類Dev

Pyqt5でQGraphicsItemを削除する方法

分類Dev

pyqt5のlineEdit入力でcwdを変更する方法

分類Dev

ブラウザのPyqt5でページのXPATHを取得する方法はありますか?

分類Dev

Python PyQt5を使用してアプリケーション(ウィンドウ)のアクティブな画面(モニター)を確認する方法

分類Dev

ユーザー入力に依存する動的QComboBoxフィルPyQt5

分類Dev

PyQt5でQRunnableを殺す方法は?

分類Dev

pyqt5とqtデザイナーでメインから2番目のウィンドウを開きます

分類Dev

pyqt5でウィンドウを閉じるときにシリアルポートを閉じる方法

分類Dev

PyQt5のメインウィンドウから新しいウィンドウにファイルを開く(別のファイルで)

分類Dev

QStylesをPyqt5に追加する

分類Dev

PyQt5 で QSlider ウィジェットを追加/削除する

分類Dev

PyQt5カーブドQSlider

Related 関連記事

  1. 1

    PyQt5のinstallEventFilter

  2. 2

    PyQt5のFocusReason?

  3. 3

    PyQt5とPythonでのユーザー入力の検証

  4. 4

    PyQT5の開発

  5. 5

    背景を回転PYQT5

  6. 6

    pyqt5 override dropEvent python

  7. 7

    PyQt5のどのGstreamer?

  8. 8

    readthedocsとPyQt5のautodoc

  9. 9

    WPFStackPanelと同等のPyQt5

  10. 10

    PyQt5 の QWebEngineView と QWidget

  11. 11

    PyQT5のGridLayoutとVerticalLayout

  12. 12

    how to upgrade from pyqt4 to pyqt5 in python

  13. 13

    Pyqt5 QtMultimediaでサウンドを再生する方法

  14. 14

    Pythonでpyqt5を使用してメインウィンドウのツールバーにQSliderを追加する方法

  15. 15

    新しいウィンドウを閉じて開くPYQT5

  16. 16

    PyQt5 QMainWindow を最初のウィンドウとしてフォーカス

  17. 17

    PyQt5でQlabelを削除する方法

  18. 18

    Pyqt5でQGraphicsItemを削除する方法

  19. 19

    pyqt5のlineEdit入力でcwdを変更する方法

  20. 20

    ブラウザのPyqt5でページのXPATHを取得する方法はありますか?

  21. 21

    Python PyQt5を使用してアプリケーション(ウィンドウ)のアクティブな画面(モニター)を確認する方法

  22. 22

    ユーザー入力に依存する動的QComboBoxフィルPyQt5

  23. 23

    PyQt5でQRunnableを殺す方法は?

  24. 24

    pyqt5とqtデザイナーでメインから2番目のウィンドウを開きます

  25. 25

    pyqt5でウィンドウを閉じるときにシリアルポートを閉じる方法

  26. 26

    PyQt5のメインウィンドウから新しいウィンドウにファイルを開く(別のファイルで)

  27. 27

    QStylesをPyqt5に追加する

  28. 28

    PyQt5 で QSlider ウィジェットを追加/削除する

  29. 29

    PyQt5カーブドQSlider

ホットタグ

アーカイブ