哈Ha!
我叫萨莎。 我是初级开发人员。 我是一名软件测试员。 我主要使用Python + Selenium编写测试,但是Python变得非常有趣,以至于我想深入研究它并学习尽可能多的框架! 我想编写一个桌面应用程序,例如简单的“计算器”。 我的选择落在Pyside2上。 我不假装有完美的代码或课程。 如果像我这样的人想要开始使用Python摸索,那就只是想分享经验。 如果我帮助某人,我已经取得了成果。
让我们开始吧!我在JetBrains的PyBarm IDE中编写了代码。 操作系统-Windows。
安装PySide2:
pip install PySide2
拥有Python根文件夹的位置,请转至该目录,然后转到文件夹“ Lib”->“ site-packages”->“ Pyside2”。 您将拥有设计器程序-这是QtDesigner程序,它将允许您为程序创建自己的界面。 值得注意的是,当您在项目目录中创建文件时,它将具有
.ui格式,Python无法理解该格式,因此我们需要将其转换为
.py格式,但这是稍后的内容。
首先,创建您的表单。

我们进行设计,调用“对象检查器”小节右边的按钮。 值得一提的是,QtDesigner支持级联样式表,如果更简单,那么通过在属性中找到“ styleSheet”参数,您就有机会根据CSS知识进行自己的设计。

接下来,我们需要将.ui文件转换为某种格式,以便Python能够理解。 转到命令行并编写
pyside2-uic "you_file.ui" -o "your_file.py"
pyside2-uic命令做什么? 它将您的
.ui文件转换为python
.py文件,并从中创建一个Python类。 也许有见识的人会说ui文件可以直接连接而无需转换为项目,但是正如Pyside2手册中所写的那样,我将使它更加整洁并且做得更好。
接下来,转到代码。
打开PyCharm,这是我们的项目目录,并根据您正在执行的程序创建一个名为calc_ui.py或something_ui.py的文件。 文件末尾的
_ui前缀将帮助我们避免
迷失在文件中。 一般而言,它应如下所示:

让我们开始编辑从
.ui转换为
.py的文件。
下面我们寻找该代码并将其复制,然后从该文件中将其删除。
if __name__ == '__main__': import sys app = QtWidgets.QApplication(sys.argv) Form = QtGui.QWidget() ui = Ui_Form() ui.setupUi(Form) Form.show() sys.exit(app.exec_())
我们创建我们的主文件,将在其中写入程序逻辑。 我称它为“ calc.py”(在目录的屏幕上方,可见)并不奇怪。
将我们复制的代码粘贴到此处,然后开始对其进行编辑。
import sys我们会从一开始就提出,因为这是一种良好的形式。
我们导入几个必要的模块来处理表单,并从文件“ calc_ui.py”导入主类
Ui_MainWindow 。
接下来,编辑
__name__ 。 我们删除不需要的所有内容。 你应该有这个:
if __name__ == '__main__':
我希望明确地对代码发表评论。 让我们继续创建
Calculator类。
class Calculator(QtWidgets.QMainWindow, Ui_MainWindow):
此外,我们的任务是确保在拨动按钮“ 1”,“ 2”,“ 3”等时发生某些事情。
在同一个地方,在类构造函数中,我们声明与任何函数的按钮连接:
self.digit_pressed函数已在按钮上的代码中指示,让我们看一下它,如果用户单击带有数字的按钮,该函数将如何处理:
还提供了有关代码的注释。
现在考虑一个函数,该函数将响应按下
“ +” ,
“-”等操作。
clear() - , def pressed_equal(self): button = self.sender() self.first_value = float(self.lineEdit.text()) self.lineEdit.clear() self.label.setText(str(self.first_value) + button.text()) self.equal = button.text()
我们将第一个值写入
self.first_value变量,并清除字段以输入操作的值,然后将输出以及数字和操作一起输出到lineEdit(我们的主输入和结果字段)。
为什么要
漂浮 ? 我可以回答,以便我决定将所有内容都设为
float ,然后在将值输出到结果块时,如果结果末尾带有“ .0”,请删除此部分,使数字为整数。 我没想到会有更好的选择。
现在,我们有了用于按数字和按操作的功能,那么下一步是什么? 接下来我们需要显示结果,这是按钮
=(ENTER) 。
def function_result(self): if self.equal == '+': self.function_addition() elif self.equal == '-': self.function_subtraction() elif self.equal == "/": self.function_divison() elif self.equal == '*': self.function_multiply() elif self.equal == "^": self.exponentiation() elif self.equal == "%": self.function_percent() elif self.equal == "log": self.function_log()
让我提醒您,变量
self.first_value现在
等于我们引入
的第一个变量,并且
self.equal包含我们单击的操作。 输入第二个数字并按
=之后 ,我们尝试找出运算符是什么,然后确定第二个变量。
我们继续介绍操作功能。 我是这样的:
def function_addition(self): self.determinate_second_value() self.result = float(self.first_value + self.second_value) self.form_result() def function_subtraction(self): self.determinate_second_value() self.result = float(self.first_value - self.second_value) self.form_result() def function_divison(self): self.determinate_second_value() self.result = float(self.first_value / self.second_value) self.form_result() def function_multiply(self): self.determinate_second_value() self.result = float(self.first_value * self.second_value) self.form_result() def function_exponentiation(self): self.determinate_second_value() self.result = float(self.first_value ** self.second_value) self.form_result() def function_percent(self): self.determinate_second_value() self.result = float(self.first_value * (self.second_value / 100)) self.form_result() def function_log(self): self.determinate_second_value() self.result = float(math.log(self.first_value, self.second_value)) self.form_result()
self.determinate_second_value()函数确定我们输入的变量的第二个值。 这虽然有点逻辑和歪曲,但实际上,稍后我会在聪明人说出如何做的过程中考虑评论中的所有错误。
有点茶点。
- self.first_value-具有输入的第一个数字的值
- self.equal-已str操作的变量
- self.second_value-具有第二个变量的值
接下来,在每个操作函数中,我们调用
self.form_result() ,这很奇怪,形成了我们的结果。 我们将结果保存在变量
self.result中 。
def form_result(self): self.result = str(self.result) if self.result[-2:] == '.0': self.result = self.result[:-2] self.lineEdit.setText(str(self.result)) self.label.clear()
我将为
self.result [-2:]进行解释。 [-2:]表示我们将字符串的最后2个字符与“ .0”进行比较。
恭喜,我们的结果显示在mainLineEdit块中。
我还将在此处附加一个代码,该代码从字符串或整数中删除一个字符或添加“。” (点)以创建分数:
def make_fractional(self): value = self.lineEdit.text() if '.' not in value: self.lineEdit.setText(value + '.') def function_delete(self): value = self.lineEdit.text() self.lineEdit.setText(value[:-1]) def function_clear(self): self.lineEdit.setText('0')
扰流器下的所有代码:
整个代码 from PySide2 import QtWidgets from calc_ui import Ui_MainWindow import sys import math class Calculator(QtWidgets.QMainWindow, Ui_MainWindow): def __init__(self): super().__init__()
是的,计算器不能计算大型函数和表达式,我正在努力!
非常感谢您的关注。 祝你好运,发展! 太棒了
我还想邀请您访问我的
JuniorProger Telegram频道,在其中谈论初级程序员的生活以及他成为
IT专家的棘手但非常有趣的方式。