Advertisement
LuftAffe

pfur

Nov 26th, 2014
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.22 KB | None | 0 0
  1. # -*- coding: utf-8 -*-
  2.  
  3. import sip, sys
  4. from PyQt4.QtCore import SIGNAL
  5. from PyQt4.QtGui import QDialog, QApplication, QPushButton, QLineEdit, QFormLayout, QLabel, QComboBox
  6.  
  7. class Form(QDialog):
  8.     def __init__(self, parent=None):
  9.         super(Form, self).__init__(parent)
  10.  
  11.         self.label1 = QLabel("A:")
  12.  
  13.         self.firstNumber = QLineEdit()
  14.  
  15.         self.label2 = QLabel(u"Система счисления A:")
  16.  
  17.         self.firstRadix = QComboBox()
  18.         self.firstRadix.addItem("2")
  19.         self.firstRadix.addItem("8")
  20.         self.firstRadix.addItem("10")
  21.         self.firstRadix.addItem("16")
  22.  
  23.         self.label3 = QLabel("A:")
  24.  
  25.         self.secondNumber = QLineEdit()
  26.  
  27.         self.label4 = QLabel(u"Система счисления B:")
  28.  
  29.         self.secondRadix = QComboBox()
  30.         self.secondRadix.addItem("2")
  31.         self.secondRadix.addItem("8")
  32.         self.secondRadix.addItem("10")
  33.         self.secondRadix.addItem("16")
  34.  
  35.         self.label5 = QLabel(u"Операция:")
  36.        
  37.         self.operation = QComboBox()
  38.         self.operation.addItem("+")
  39.         self.operation.addItem("-")
  40.         self.operation.addItem("*")
  41.         self.operation.addItem("/")
  42.         self.operation.addItem("or")
  43.         self.operation.addItem("and")
  44.         self.operation.addItem("xor")
  45.        
  46.        
  47.         self.label6 = QLabel(u"Система счисления резульатата:")
  48.         self.resultRadix = QComboBox()
  49.         self.resultRadix.addItem("2")
  50.         self.resultRadix.addItem("8")
  51.         self.resultRadix.addItem("10")
  52.         self.resultRadix.addItem("16")
  53.        
  54.         self.pb = QPushButton(u"Расчёт")
  55.        
  56.         self.result = QLineEdit()
  57.        
  58.         layout = QFormLayout()
  59.         layout.addWidget(self.label1)
  60.         layout.addWidget(self.firstNumber)
  61.         layout.addWidget(self.label2)
  62.         layout.addWidget(self.firstRadix)
  63.         layout.addWidget(self.label3)
  64.         layout.addWidget(self.secondNumber)
  65.         layout.addWidget(self.label4)
  66.         layout.addWidget(self.secondRadix)
  67.         layout.addWidget(self.label5)
  68.         layout.addWidget(self.operation)
  69.         layout.addWidget(self.label6)
  70.         layout.addWidget(self.resultRadix)
  71.         layout.addWidget(self.pb)
  72.         layout.addWidget(self.result)
  73.        
  74.         self.setLayout(layout)
  75.         self.connect(self.pb, SIGNAL("clicked()"),self.button_click)
  76.         self.resize(320, 320);
  77.         self.setWindowTitle("PFUR")
  78.    
  79.     def strb(self, n, base):
  80.         t = "0123456789ABCDEF"
  81.         res = ""
  82.         while n:
  83.             res += t[n % base]
  84.             n //= base
  85.         return res[::-1]
  86.    
  87.     def button_click(self):
  88.         rad1 = int(self.firstRadix.currentText())
  89.         rad2 = int(self.secondRadix.currentText())
  90.         rad3 = int(self.resultRadix.currentText())
  91.         try:
  92.             if self.operation.currentText() == '+':
  93.                 self.result.setText(self.strb(int(str(self.firstNumber.text()), rad1) + int(str(self.secondNumber.text()), rad2), rad3))
  94.             if self.operation.currentText() == '*':
  95.                 self.result.setText(self.strb(int(str(self.firstNumber.text()), rad1) * int(str(self.secondNumber.text()), rad2), rad3))
  96.             if self.operation.currentText() == '/':
  97.                 self.result.setText(self.strb(int(str(self.firstNumber.text()), rad1) / int(str(self.secondNumber.text()), rad2), rad3))
  98.             if self.operation.currentText() == '-':
  99.                 self.result.setText(self.strb(int(str(self.firstNumber.text()), rad1) - int(str(self.secondNumber.text()), rad2), rad3))
  100.             if self.operation.currentText() == 'or':
  101.                 self.result.setText(self.strb(int(str(self.firstNumber.text()), rad1) | int(str(self.secondNumber.text()), rad2), rad3))
  102.             if self.operation.currentText() == 'xor':
  103.                 self.result.setText(self.strb(int(str(self.firstNumber.text()), rad1) ^ int(str(self.secondNumber.text()), rad2), rad3))
  104.             if self.operation.currentText() == 'and':
  105.                 self.result.setText(self.strb(int(str(self.firstNumber.text()), rad1) & int(str(self.secondNumber.text()), rad2), rad3))
  106.            
  107.         except ZeroDivisionError:
  108.             self.result.setText(u"Деление на 0 запрещено")
  109.            
  110.         except ValueError:
  111.             f = str(self.firstNumber.text())
  112.             s = str(self.secondNumber.text())
  113.             if(len(f) == 0 and len(s) == 0):
  114.                 self.result.setText(u"Введите необходимые данные в поля для ввода")
  115.             elif(len(f) == 0):
  116.                 try:
  117.                     self.result.setText(self.strb(int(s, rad2), rad3))
  118.                 except ValueError:
  119.                     self.result.setText(u"Введённые данные не корректны")
  120.             else:
  121.                 try:
  122.                     self.result.setText(self.strb(int(f, rad1), rad3))
  123.                 except ValueError:
  124.                     self.result.setText(u"Введённые данные не корректны")
  125.                
  126. app = QApplication(sys.argv)
  127. form = Form()
  128. form.show()
  129. app.exec_()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement