اذهب إلى المحتوى
  • 0

كود بايثون لا يعمل بعد تحويله من UI

عمر ايمن

السؤال

لقد صممت واجهة GUI لحساب الزمن * المسافة من خلال QT designer ولكن لم أستطع ضبط الكود بشكل يجعله يعمل بشكل صحيح

 

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(554, 401)
        self.pushButton5 = QtWidgets.QPushButton(Dialog)
        self.pushButton5.setGeometry(QtCore.QRect(110, 220, 93, 28))
        self.pushButton5.setObjectName("pushButton5")
        self.pushButton8 = QtWidgets.QPushButton(Dialog)
        self.pushButton8.setGeometry(QtCore.QRect(220, 220, 93, 28))
        self.pushButton8.setObjectName("pushButton8")
        self.pushButton12 = QtWidgets.QPushButton(Dialog)
        self.pushButton12.setGeometry(QtCore.QRect(320, 220, 93, 28))
        self.pushButton12.setObjectName("pushButton12")
        self.label_2 = QtWidgets.QLabel(Dialog)
        self.label_2.setGeometry(QtCore.QRect(104, 150, 101, 20))
        font = QtGui.QFont()
        font.setPointSize(9)
        font.setBold(True)
        font.setItalic(False)
        font.setWeight(75)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.speed = QtWidgets.QLineEdit(Dialog)
        self.speed.setGeometry(QtCore.QRect(220, 150, 113, 22))
        self.speed.setObjectName("speed")
        self.result = QtWidgets.QLabel(Dialog)
        self.result.setGeometry(QtCore.QRect(130, 180, 301, 21))
        self.result.setText("")
        self.result.setObjectName("result")

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.pushButton5.setText(_translate("Dialog", "5"))
        self.pushButton8.setText(_translate("Dialog", "8"))
        self.pushButton12.setText(_translate("Dialog", "12"))
        self.label_2.setText(_translate("Dialog", "Enter Speed"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

أنشئ دالة تكون مهمتها التحويل الي القيمة التي تريد واستخدم self.pushButton5.clicked.connect في استدعائها ,سوف تكون في حاجة إلي تمرير قيمة كل زر الي الدالة عند الضغط عليه,

يمكنك استخدام lambda <

علي سبيل المثال,

self.pushButton5.clicked.connect(lambda x: self.calc_distance(5))

ال calc_distance هي الدالة الخاصة بنا ,

بعد ذلك يمكنك عرض القيمة الناتجة في self.result من خلال self.result.setText(str(distance))

واقترح عليك انشاء فانكشن مستقلة يمكنك استدعاء ال clicked.connect بداخلها 

تابع الكود بعد التعديل

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(554, 401)
        self.pushButton5 = QtWidgets.QPushButton(Dialog)
        self.pushButton5.setGeometry(QtCore.QRect(110, 220, 93, 28))
        self.pushButton5.setObjectName("pushButton5")
        self.pushButton8 = QtWidgets.QPushButton(Dialog)
        self.pushButton8.setGeometry(QtCore.QRect(220, 220, 93, 28))
        self.pushButton8.setObjectName("pushButton8")
        self.pushButton12 = QtWidgets.QPushButton(Dialog)
        self.pushButton12.setGeometry(QtCore.QRect(320, 220, 93, 28))
        self.pushButton12.setObjectName("pushButton12")
        self.label_2 = QtWidgets.QLabel(Dialog)
        self.label_2.setGeometry(QtCore.QRect(104, 150, 101, 20))
        font = QtGui.QFont()
        font.setPointSize(9)
        font.setBold(True)
        font.setItalic(False)
        font.setWeight(75)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.speed = QtWidgets.QLineEdit(Dialog)
        self.speed.setGeometry(QtCore.QRect(220, 150, 113, 22))
        self.speed.setObjectName("speed")
        self.result = QtWidgets.QLabel(Dialog)
        self.result.setGeometry(QtCore.QRect(130, 180, 301, 21))
        self.result.setText("")
        self.result.setObjectName("result")

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)
        self.initUI() #New

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.pushButton5.setText(_translate("Dialog", "5"))
        self.pushButton8.setText(_translate("Dialog", "8"))
        self.pushButton12.setText(_translate("Dialog", "12"))
        self.label_2.setText(_translate("Dialog", "Enter Speed"))

    def initUI(self): #New
        self.pushButton5.clicked.connect(lambda x: self.calc_distance(5)) #New
        self.pushButton8.clicked.connect(lambda x: self.calc_distance(8)) #New
        self.pushButton12.clicked.connect(lambda x: self.calc_distance(12))#New
        
    def calc_distance(self,index):#New
        speed = float(self.speed.text()) #New
        time_ = float(index)#New
        distance = speed*time_ #New
        print(distance, " :KM") #New
        self.result.setText(str(distance)) #New

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Dialog = QtWidgets.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())

ما كان ينقص مشروعك هو الحركة أو الاستجابة لمؤثر الضغط علي المفاتيح,

أولا قمنا ببناء دالة initUI وبداخلها المفاتيح ,عند ضغط اي زر او مفتاح يتم استدعاء الدالة calc_distance ونمرر اليها معلومات او عدد الساعات المتعلقة بالزر المضغوط.

وبدورها تحصلي علي السعة من الحقل self,speed ثم ننفذ العملية  distance = speed*time_ ,

الناتج يمكن طباعته في شاشة الاوامر ويمكن عرضه داخل self.result

self.result.setText(str(distance))

لا تنسا يجب استدعاء initUI داخل setupUi..
 

Screenshot_333.png

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...