calculator
This commit is contained in:
52
windows/calculator.py
Normal file
52
windows/calculator.py
Normal file
@@ -0,0 +1,52 @@
|
||||
from PySide6 import QtWidgets, QtCore
|
||||
|
||||
class CalculatorDialog(QtWidgets.QDialog):
|
||||
def __init__(self, strings, parent=None):
|
||||
super().__init__(parent)
|
||||
self.strings = strings["calculator"]
|
||||
self.setWindowTitle(self.strings["title"])
|
||||
self.setMinimumWidth(350)
|
||||
|
||||
# Main layout
|
||||
layout = QtWidgets.QVBoxLayout(self)
|
||||
|
||||
# text box
|
||||
self.equation_box = QtWidgets.QLineEdit()
|
||||
self.equation_box.setPlaceholderText("Type a mathematical equation...")
|
||||
self.equation_box.textChanged.connect(self.update_result)
|
||||
layout.addWidget(self.equation_box)
|
||||
|
||||
# label
|
||||
self.result_label = QtWidgets.QLabel()
|
||||
self.result_label.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse) # type: ignore
|
||||
self.result_label.setStyleSheet("padding: 5px; border: 1px solid #ccc; border-radius: 4px;")
|
||||
layout.addWidget(self.result_label)
|
||||
|
||||
# copy button
|
||||
button_layout = QtWidgets.QHBoxLayout()
|
||||
button_layout.addStretch()
|
||||
copy_button = QtWidgets.QPushButton(self.strings.get("copy_button", "Copy"))
|
||||
copy_button.clicked.connect(self.copy_to_clipboard)
|
||||
button_layout.addWidget(copy_button)
|
||||
layout.addLayout(button_layout)
|
||||
|
||||
self.setLayout(layout)
|
||||
self.equation_box.setFocus()
|
||||
|
||||
def update_result(self, text: str):
|
||||
if not text.strip():
|
||||
self.result_label.setText("")
|
||||
return
|
||||
|
||||
try:
|
||||
result = eval(text)
|
||||
|
||||
self.result_label.setText(str(result))
|
||||
except Exception:
|
||||
self.result_label.setText("")
|
||||
|
||||
def copy_to_clipboard(self):
|
||||
text = self.result_label.text()
|
||||
if text:
|
||||
clipboard = QtWidgets.QApplication.clipboard()
|
||||
clipboard.setText(text)
|
||||
Reference in New Issue
Block a user