PyQt Arayüz Ekleme


#1

Merhaba;

Python’a yeni başladım. HEnüz başlangıç aşamasındayım. Ufak ufak uygulamalar yapmaya çalışıyorum. İşyerim için ufak bir uygulama yaptım ancak arayüze bir türlü ekleyemedim. (Daha doğrusu nasıl eklenir bilmiyorum.) Bu konu hakkında ypardım ederseniz memnun olurum. Arayüzü qtdesigner ile yaptım. Yazdığım kodla arayüz tam uyuşmuyor. Benim asıl sorum arayüzden nasıl veri alınabilir print fonksiyonu nasıl kullanılır.
Arayüz kodları:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'tecviz.ui'
#
# Created by: PyQt5 UI code generator 5.5.1
#
# WARNING! All changes made in this file will be lost!


from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Tecviz(object):
    def setupUi(self, Tecviz):
        Tecviz.setObjectName("Tecviz")
        Tecviz.resize(400, 300)
        self.centralWidget = QtWidgets.QWidget(Tecviz)
        self.centralWidget.setObjectName("centralWidget")
        self.hesapla = QtWidgets.QPushButton(self.centralWidget)
        self.hesapla.setGeometry(QtCore.QRect(200, 10, 91, 91))
        self.hesapla.setObjectName("hesapla")
        self.sifirla = QtWidgets.QPushButton(self.centralWidget)
        self.sifirla.setGeometry(QtCore.QRect(300, 10, 91, 91))
        self.sifirla.setObjectName("sifirla")
        self.radioButton = QtWidgets.QRadioButton(self.centralWidget)
        self.radioButton.setGeometry(QtCore.QRect(10, 20, 181, 23))
        self.radioButton.setObjectName("radioButton")
        self.radioButton_2 = QtWidgets.QRadioButton(self.centralWidget)
        self.radioButton_2.setGeometry(QtCore.QRect(10, 70, 181, 23))
        self.radioButton_2.setObjectName("radioButton_2")
        self.textEdit = QtWidgets.QTextEdit(self.centralWidget)
        self.textEdit.setGeometry(QtCore.QRect(20, 130, 171, 25))
        self.textEdit.setObjectName("textEdit")
        self.label = QtWidgets.QLabel(self.centralWidget)
        self.label.setGeometry(QtCore.QRect(66, 110, 101, 17))
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.centralWidget)
        self.label_2.setGeometry(QtCore.QRect(50, 150, 121, 20))
        self.label_2.setObjectName("label_2")
        self.textEdit_2 = QtWidgets.QTextEdit(self.centralWidget)
        self.textEdit_2.setGeometry(QtCore.QRect(20, 170, 171, 25))
        self.textEdit_2.setObjectName("textEdit_2")
        self.label_3 = QtWidgets.QLabel(self.centralWidget)
        self.label_3.setGeometry(QtCore.QRect(70, 194, 101, 17))
        self.label_3.setObjectName("label_3")
        self.textEdit_3 = QtWidgets.QTextEdit(self.centralWidget)
        self.textEdit_3.setGeometry(QtCore.QRect(20, 213, 171, 25))
        self.textEdit_3.setObjectName("textEdit_3")
        self.lcdNumber = QtWidgets.QLCDNumber(self.centralWidget)
        self.lcdNumber.setGeometry(QtCore.QRect(220, 170, 171, 23))
        self.lcdNumber.setObjectName("lcdNumber")
        self.lcdNumber_2 = QtWidgets.QLCDNumber(self.centralWidget)
        self.lcdNumber_2.setGeometry(QtCore.QRect(220, 210, 171, 23))
        self.lcdNumber_2.setObjectName("lcdNumber_2")
        self.label_4 = QtWidgets.QLabel(self.centralWidget)
        self.label_4.setGeometry(QtCore.QRect(268, 116, 81, 31))
        font = QtGui.QFont()
        font.setFamily("Nimbus Sans L")
        font.setPointSize(20)
        font.setBold(True)
        font.setWeight(75)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.label_5 = QtWidgets.QLabel(self.centralWidget)
        self.label_5.setGeometry(QtCore.QRect(277, 150, 61, 20))
        self.label_5.setObjectName("label_5")
        self.label_6 = QtWidgets.QLabel(self.centralWidget)
        self.label_6.setGeometry(QtCore.QRect(270, 190, 71, 20))
        self.label_6.setObjectName("label_6")
        Tecviz.setCentralWidget(self.centralWidget)
        self.menuBar = QtWidgets.QMenuBar(Tecviz)
        self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 22))
        self.menuBar.setObjectName("menuBar")
        Tecviz.setMenuBar(self.menuBar)
        self.mainToolBar = QtWidgets.QToolBar(Tecviz)
        self.mainToolBar.setObjectName("mainToolBar")
        Tecviz.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
        self.statusBar = QtWidgets.QStatusBar(Tecviz)
        self.statusBar.setObjectName("statusBar")
        Tecviz.setStatusBar(self.statusBar)

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

    def retranslateUi(self, Tecviz):
        _translate = QtCore.QCoreApplication.translate
        Tecviz.setWindowTitle(_translate("Tecviz", "Tecviz"))
        self.hesapla.setText(_translate("Tecviz", "Hesapla"))
        self.sifirla.setText(_translate("Tecviz", "Sıfırla"))
        self.radioButton.setText(_translate("Tecviz", "Sayısal ( Yapılaşmış )"))
        self.radioButton_2.setText(_translate("Tecviz", "Planimetrik ( Yapılaşmamış )"))
        self.label.setText(_translate("Tecviz", "Tapu Alanı m²"))
        self.label_2.setText(_translate("Tecviz", "Hesaplanan Alan m²"))
        self.label_3.setText(_translate("Tecviz", "Pafta Ölçeği"))
        self.label_4.setText(_translate("Tecviz", "Sonuç"))
        self.label_5.setText(_translate("Tecviz", "Alan Farkı"))
        self.label_6.setText(_translate("Tecviz", "Tecviz Farkı"))


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

Uygulama Kodları:

from math import sqrt

tur = input("Parsel Sayısal ise 1 Fotogrametrik ise 2 yazınız:")
ölcek = input("Pafta Ölçeğini Giriniz:")
alan = input("Tapu Alanını Giriniz:")

katsayi = 0.013
katsayi1 = 0.0003
katsayi2 = 0.0004

öa = float(ölcek)*float(alan)
karekek = sqrt(öa)
veri= float(karekek)*float(katsayi)
veri1= float(katsayi1)*float(alan)

sonuc = float(veri)+float(veri1)
falan = float(alan)
fkarakek = sqrt(falan)
veri3 = float(katsayi2)*float(ölcek)*float(fkarakek)
veri4 = float(katsayi1)*float(alan)

sonuc2 = float(veri3)+float(veri4)

if tur == "1":
  print ("Tecviz Sayısal", round(sonuc,2))
elif tur == "2":
  print ("Tecviz Fotoğraf", round(sonuc2,2) )

#2

Merhaba.

Yazdığınız uygulamadan arayüz sınıfı olan Ui_Tecviz'i içe aktarmalısınız. Böylece, örneğin, hesapla tuşuna bir tıklanma dinleyicisi atayabilirsiniz. Bunu nasıl yapabileceğiniz arayüz kodunuzun en altında yazılı aslında. Bir örnek vereyim:

from PyQt5 import QtWidgets
import sys
# Arayüz dosyanızın adının 'tecviz_ui.py' olduğunu varsaydım.
from tecviz_ui import Ui_Tecviz

uygulama = QtWidgets.QApplication(sys.argv)
Tecviz = QtWidgets.QMainWindow()
# Burada oluşturduğumuz `arayüz` nesnesini kullanarak pencere araçlarına ulaşabilirsiniz.
arayüz = Ui_Tecviz()
arayüz.setupUi(Tecviz)
Tecviz.show()
sys.exit(uygulama.exec_())

Şimdi bu koda uygulamanızın mantığını ekleyebilirsiniz. Bu arada, unutmamalısınız ki komut satırı uygulamaları ile arayüz uygulamaları arasında farklar vardır. Örneğin; komut satırı uygulamalarında ekrana bir şey yazmak için print fonksiyonu kullanılır. Ancak arayüzde komut satırı gibi bir ortam yerine tuşlar, etiketler, metin kutuları, vb. pencere araçları vardır ve bu pencere araçlarına metinler eklenerek çıktı olarak verilmek istenen verilebilir. Bir de yukarıdaki kodu sınıflı bir şekilde yazmanız, ilerisi için size kolaylık sağlayabilir. Bunun için Ui_Tecviz sınıfından türemiş bir sınıf oluşturabilir ve diğer kodları da buna uygun hale getirebilirsiniz.

İyi çalışmalar.


#3

Sorunumu yanlış anlattım herhalde aslında ben arayüzde oluşturduğum text editlere yazılan verileri alıp nasıl işlem yaptıracağımı, hesaplama butonunu tıklandığında nasıl komutların çalıştırılacağı konularında sıkıntı çekiyorum. Python’a yeni başladığım sınıf kavramlarını tam bilmiyorum. İlginiz ve yardımınız için teşekkürler.


#4

Bunlar için PyQt bilgisine ihtiyacınız var. Örnek bir belgelendirme için şuraya bakabilirsiniz: http://www.pythondersleri.com/p/pyqt.html


#5

Yardımınız için teşekkürler. Şu an paylaştığınız Tkinter notları ile arayüz yapmaya çalışıyorum. Buna da bakacağım en kısa sürede.


#6

Ek olarak pyqt5 için bende bir kaynak paylaşayım.
Pyqt5 Belgelendirme