pyqt图形化显示—2.信号与槽
<h1>信号:</h1><p>event事件的工作方法是不断扫描是否发生事件然后做出相应,这种方式固然简单易懂,但如果我同一时间需要多项交互,那就不是能处理的了</p>
<p>所以pyside6采用信号(signal),可以以解为一件事情发生会发出一个信号呼叫对应的处理器(slot)响应</p>
<h1>基础控件的信号:</h1>
<h2>按键:</h2>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">class</span><span style="color: rgba(0, 0, 0, 1)"> MyWindow(QWidget):
</span><span style="color: rgba(0, 0, 255, 1)">def</span> <span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">(self):
super().</span><span style="color: rgba(128, 0, 128, 1)">__init__</span><span style="color: rgba(0, 0, 0, 1)">()
btn </span>= QPushButton(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">按钮名称</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">, self)
btn.clicked.connect(self.btn_click)</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 按键点击时触发事件</span>
<span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> btn_click(self):
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">按钮被点击了</span><span style="color: rgba(128, 0, 0, 1)">'</span>)</pre>
</div>
<div>btn.clicked.connect() # 变量名称.信号名称.connect(对应的事件函数)</div>
<h2>输入框:</h2>
<p>获得输入的内容</p>
<div class="cnblogs_code">
<pre>account = self.lineEdit.text()</pre>
</div>
<p>变量名 = self.对应输入框的objectName.text()</p>
<p>对应输入框的objectName可以在Qt Designer中找到</p>
<h1>应用小项目:简易计算器</h1>
<p>首先在Qt Designer绘制一个简易的计算器页面,保存ui文件</p>
<p><img src="https://img2024.cnblogs.com/blog/1677113/202601/1677113-20260106172955688-933119313.png"></p>
<p> 转化为py文件,静态导入,多继承打开</p>
<p><img src="https://img2024.cnblogs.com/blog/1677113/202601/1677113-20260106173041468-1029253860.png"></p>
<h2> 赋予按键数值和符号</h2>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> com(self):
self.pushButton_0.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span> : self.add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">0</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
self.pushButton_1.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span> : self.add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">1</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
self.pushButton_2.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span> : self.add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">2</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
self.pushButton_3.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span> : self.add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">3</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
self.pushButton_4.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span> : self.add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">4</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
self.pushButton_5.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span> : self.add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">5</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
self.pushButton_6.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span> : self.add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">6</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
self.pushButton_7.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span> : self.add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">7</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
self.pushButton_8.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span> : self.add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">8</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
self.pushButton_9.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span> : self.add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">9</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
self.pushButton_jia.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span> : self.add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">+</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
self.pushButton_jian.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span> : self.add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">-</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
self.pushButton_cheng.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span> : self.add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">*</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
self.pushButton_chu.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span> : self.add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">/</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
self.pushButton_dian.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span> : self.add(<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">.</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">))
self.pushButton_C.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span><span style="color: rgba(0, 0, 0, 1)"> : self.clear())
self.pushButton_CE.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span><span style="color: rgba(0, 0, 0, 1)"> : self.clearall())
self.pushButton_ent.clicked.connect(</span><span style="color: rgba(0, 0, 255, 1)">lambda</span> : self.jisuan())</pre>
</div>
<h2>添加 add函数</h2>
<div>定义一个add函数,将参数num转换为字符串后拼接到self.result后面,更新在输出框内的显示</div>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">def</span> add(self, num):
self.result += str(num)
self.lineEdit.setText(self.result)<span style="color: rgba(0, 128, 0, 1)"><br></span></pre>
</div>
<h2>清除 clear函数</h2>
<p>删除self.result最后一个字符,实现回退功能,记得更新显示</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> clear(self):
self.result </span>= self.result[:-1<span style="color: rgba(0, 0, 0, 1)">]
self.lineEdit.setText(self.result)</span></pre>
</div>
<h2>全部删除 clearall函数</h2>
<p>直接将self.result置为空,记得更新显示</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> clearall(self):
self.result </span>= <span style="color: rgba(128, 0, 0, 1)">''</span><span style="color: rgba(0, 0, 0, 1)">
self.lineEdit.setText(self.result)</span></pre>
</div>
<h2>计算 jisuan函数</h2>
<p>使用eval函数计算表达式结果,由于存在回退功能,所以计算时不能更新self.result内容,所以直接更新显示就可以,添加error防止出现错误,提高鲁棒性</p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> jisuan(self):
</span><span style="color: rgba(0, 0, 255, 1)">try</span><span style="color: rgba(0, 0, 0, 1)">:
self.lineEdit.setText(str(eval(self.result)))
</span><span style="color: rgba(0, 0, 255, 1)">except</span><span style="color: rgba(0, 0, 0, 1)">:</span><span style="color: rgba(0, 0, 0, 1)">
self.lineEdit.setText(</span>'error'<span>)</span></pre>
</div>
<p>就酱,一个简易(划掉)简陋计算器就完成啦</p><br><br>
来源:https://www.cnblogs.com/berserker-slst/p/19448773
頁:
[1]