if widget := QApplication.focusWidget(),Python 版本 3.7 不支持赋值表达式
时间: 2024-02-11 22:05:32 浏览: 163
对不起,我之前的回答又有误。确实,Python 3.7 不支持赋值表达式,因此我们需要使用 `if` 语句来获取焦点的 `QWidget` 对象,并在需要时关闭它。以下是修改后的示例代码:
```python
from PyQt5.QtWidgets import QApplication, QTableWidget, QTableWidgetItem
app = QApplication([])
# 创建一个 3x3 的表格
table = QTableWidget(3, 3)
# 在第 0 行第 0 列插入一个单元格,并将其设置为可编辑状态
item = QTableWidgetItem("Editable cell")
table.setItem(0, 0, item)
table.editItem(item)
# 关闭当前编辑的单元格,并提交编辑内容
widget = QApplication.focusWidget()
if widget:
widget.close()
table.show()
app.exec_()
```
在上面的示例中,我们在第 0 行第 0 列插入了一个单元格,并将其设置为可编辑状态。然后,我们调用 `editItem()` 方法来启动该单元格的编辑状态。最后,我们使用 `QApplication` 的 `focusWidget()` 方法来获取当前具有焦点的 `QWidget` 对象,如果该对象存在,则关闭它,以退出编辑状态。
相关问题
#include "softkey.h" #include <QKeyEvent> #include <QApplication> SoftKey::SoftKey(QWidget *parent):QToolButton(parent) { //在构造函数中,建立clicked相关的槽,在槽中实现对应的事件的功能 connect(this,SIGNAL(clicked(bool)),this,SLOT(button_clicked(bool))); } void SoftKey::button_clicked(bool) { //this->text() ----获得按钮控件上的文本内容,比如,删除 this --- 它就代表着ui->pushButton if(this->text() == "<-") { //定义一个事件,Key_Backspace撤消按钮 QKeyEvent* key = new QKeyEvent(QEvent::KeyPress,Qt::Key_Backspace,Qt::NoModifier, this->text()); //通过postEvent将事件key发送出去给QApplication::focusWidget(), //在当前窗口界面中有焦点的控件 QApplication::postEvent(QApplication::focusWidget(),key); }else { QKeyEvent* key = new QKeyEvent(QEvent::KeyPress,'w',Qt::NoModifier, this->text()); //通过postEvent将事件key的文本内容发送出去,QApplication::focusWidget()当前窗口中,有光标的 //控件上 QApplication::postEvent(QApplication::focusWidget(),key); } }错误出现在这段代码里,如何解决
这段代码的错误可能是由于缺少SoftKey类的析构函数导致的。你可以尝试添加一个析构函数来解决这个错误,如下所示:
```c++
SoftKey::~SoftKey()
{
//添加你需要的代码
}
```
如果这个错误依然存在,可以检查是否正确链接了softkey.cpp文件,并确保Qt库已经正确安装和配置。
阅读全文