首页 > 解决方案 > PYQT5 物理计算器

问题描述

我正在制作一个物理计算器,它从人那里获取值并使用计算来显示答案。问题是当我按下提交获取值并将它们保存为变量并显示一个按钮来显示答案时,应用程序关闭并且崇高的文本显示 REPL 关闭。我不知道为什么。请帮忙

import sys
from PyQt5.QtWidgets import QWidget
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QPushButton
from PyQt5.QtWidgets import QToolTip , QCheckBox, QLCDNumber,QLineEdit,QInputDialog#just compile the modules like this
from PyQt5.QtGui import QIcon
from PyQt5.QtWidgets import QLabel
def ObjectDensity():
    dflabel = QLabel("Please Enter Density of Fluid: ",w)
    dflabel.move(25,220)
    dflabel.show()
    dfte = QLineEdit(w)
    dfte.move(25,260)
    dfte.show()
    Weight2 = QLabel("Please Enter Weight:",w)
    Weight2.move(25,300)
    Weight2.show()
    Wte = QLineEdit(w)
    Wte.move(25,340)
    Wte.show()
    AIW2 = QLabel("Enter Apperent Immersed Weight: ",w)
    AIW2.move(25,380)
    AIW2.show()
    aiwte = QLineEdit(w)
    aiwte.move(25,420)
    aiwte.show()
    ansbutton = QPushButton("Submit",w)
    ansbutton.move(50,480)
    ansbutton.show()
    ansbutton.clicked.connect(lambda: f1(dfte,Wte,aiwte,ansdo))
    # df1 = dfte.text()
    # w2 = Wte.text()
    # aiw6 = aiwte.text()
def f1(dfte,Wte,aiwte,ansdo):

    df1 = int(dfte.text())
    w2 = int(Wte.text())
    aiw6 = int(aiwte.text())
    # ansdo = ((w2/w2-aiw6)*df1)
    # ans4 = int(ansdo)
    ans = QPushButton("press to show answer",w)
    ans.move(50,250)
    ans.show()
    ans.clicked.connect(lambda:f2(w2,aiw6,df1))
def f2(w2,aiw6,df1):
    ansdo = ((w2/w2-aiw6)*df1)
    ans4 = int(ansdo)
    answer = QLabel(ans4,w)
    answer.move(75,300)
    answer.show()


def arch():
    l_archimedes = QLabel("Archimedes' Law",w)
    l_archimedes.move(25,80)
    l_archimedes.show()
    l_archimedes2 = QLabel("Density of Object/Density of Fluid = Weight/(Weight - Apparent Immersed Weight)",w)
    l_archimedes2.move(25,110)
    l_archimedes2.show()
    Archimedeslaw = QLabel("What Do You Want to Solve For:",w)
    Archimedeslaw.move(25,145)
    Archimedeslaw.show()
    dop = QPushButton("Density of Object",w)
    dop.move(25,160)
    dop.show()
    dop.clicked.connect(ObjectDensity)


    DF = QPushButton("Density of Fluid",w)
    DF.move(200,160)
    DF.show()
    Weight = QPushButton("Weight",w)
    Weight.move(375,160)
    Weight.show()
    AIW = QPushButton("Apperent Immersed Weight",w)
    AIW.move(500,160)
    AIW.show()

app = QApplication(sys.argv)
w = QWidget()
w.resize(900,600)
w.move(460,0)
w.setWindowTitle("Physics Laws")
L1 = QLabel("Welcome To Physics Laws",w,)
L1.move(25,0)
b1 = QPushButton("Archimedes Law",w)
b1.move(25,45)
b1.clicked.connect(arch)









w. show()
sys.exit(app.exec_())

标签: pythonpython-3.xpyqtpyqt5

解决方案


试试看:

import sys
from PyQt5.QtWidgets import (QWidget, QApplication, QPushButton, QLabel,
                             QToolTip, QCheckBox, QLCDNumber,
                             QLineEdit, QInputDialog)    # ??? just compile the modules like this
from PyQt5.QtGui     import QIcon

def ObjectDensity():
    dflabel = QLabel("Please Enter Density of Fluid: ",w)
    dflabel.move(25,220)
    dflabel.show()
    dfte = QLineEdit(w)
    dfte.move(25,260)
    dfte.show()
    Weight2 = QLabel("Please Enter Weight:",w)
    Weight2.move(25,300)
    Weight2.show()
    Wte = QLineEdit(w)
    Wte.move(25,340)
    Wte.show()
    AIW2 = QLabel("Enter Apperent Immersed Weight: ",w)
    AIW2.move(25,380)
    AIW2.show()
    aiwte = QLineEdit(w)
    aiwte.move(25,420)
    aiwte.show()
    ansbutton = QPushButton("Submit",w)
    ansbutton.move(50,480)
    ansbutton.show()
    ansbutton.clicked.connect(lambda: f1(dfte,Wte,aiwte )) #,ansdo)) # <------------------
    # df1 = dfte.text()
    # w2 = Wte.text()
    # aiw6 = aiwte.text()

def f1(dfte,Wte,aiwte):  #,ansdo):                                   # <------------------
    df1 = int(dfte.text())
    w2 = int(Wte.text())
    aiw6 = int(aiwte.text())
    # ansdo = ((w2/w2-aiw6)*df1)
    # ans4 = int(ansdo)
    ans = QPushButton("press to show answer", w)

    #ans.move(50,250)
    ans.move(50, 520)                                                # <------------------
    ans.show()

    answer.hide()                                                    # <------------------

    ans.clicked.connect(lambda: f2(w2, aiw6, df1))

def f2(w2, aiw6, df1):
    print("def f2(w2=`{}`, \naiw6=`{}`, \ndf1=`{}`):".format(w2, aiw6, df1) )
    ansdo = ((w2/w2-aiw6)*df1)                                       #  w2/w2 = 1  <--- ???
    #ans4 = int(ansdo)
    #answer = QLabel(ans4, w)
    #answer.move(75,300)
    answer.setText(str(ansdo))                                        # <------------------
    answer.show()                                                     # <------------------


def arch():
    l_archimedes = QLabel("Archimedes' Law",w)
    l_archimedes.move(25,80)
    l_archimedes.show()
    l_archimedes2 = QLabel("Density of Object/Density of Fluid = Weight/(Weight - Apparent Immersed Weight)",w)
    l_archimedes2.move(25,110)
    l_archimedes2.show()
    Archimedeslaw = QLabel("What Do You Want to Solve For:",w)
    Archimedeslaw.move(25,145)
    Archimedeslaw.show()
    dop = QPushButton("Density of Object",w)
    dop.move(25,160)
    dop.show()
    dop.clicked.connect(ObjectDensity)


    DF = QPushButton("Density of Fluid",w)
    DF.move(200,160)
    DF.show()
    Weight = QPushButton("Weight",w)
    Weight.move(375,160)
    Weight.show()
    AIW = QPushButton("Apperent Immersed Weight",w)
    AIW.move(500,160)
    AIW.show()

app = QApplication(sys.argv)
w = QWidget()
w.resize(900,600)
w.move(460,0)
w.setWindowTitle("Physics Laws")
L1 = QLabel("Welcome To Physics Laws",w,)
L1.move(25,0)
b1 = QPushButton("Archimedes Law",w)
b1.move(25,45)
b1.clicked.connect(arch)

answer = QLabel(w)                                                  # <------------------
answer.move(50, 550)                                                # <------------------


w. show()
sys.exit(app.exec_())

在此处输入图像描述


推荐阅读