gpt4 book ai didi

python - 在选项卡式停靠小部件中重置焦点

转载 作者:行者123 更新时间:2023-12-01 09:28:48 25 4
gpt4 key购买 nike

目前我在选项卡式 QDockWidgets 的焦点方面遇到问题。使用两个选项卡式 QDockWidget 来处理这个小示例:

from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QTextEdit
from PyQt5.Qt import Qt

app = QApplication( [] )
main = QMainWindow(None, Qt.Window)
main.show()

dock1 = QDockWidget( "D1", main )
dock1.setWidget( QTextEdit( dock1 ) )
main.addDockWidget( Qt.TopDockWidgetArea, dock1 )

dock2 = QDockWidget( "D2", main )
dock2.setWidget( QTextEdit( dock2 ) )
main.tabifyDockWidget( dock1, dock2 )

exit( app.exec() )

我发现,当切换到选项卡式小部件的其他选项卡时,QTextEdits 不会失去焦点。

  1. 在其中一个字段中写入文本
  2. 单击 QTabBar 上的另一个选项卡
  3. 继续键盘输入

您编写的第二个文本仍然是第一个小部件的焦点。

<小时/>

所以,一般来说:
有没有办法失去选项卡式小部件的焦点,无论它是 QTextEdit 还是其他小部件(甚至可能具有复杂的子布局结构)?

我试过clearFocus()QDockWidget 上,但是如果 QDockWidget 本身包含焦点(而不是它的子项),这似乎才起作用。
使用setFocus() before 似乎也不是一个好的选择,因为小部件(或其子部件)可能并不在每种情况下都包含焦点。因此从其他小部件中窃取它是不合适的。

<小时/>

我认为最好的 react anchor 是:

如果您能以某种方式找到动态创建的 QTabBar:

最佳答案

执行此操作的一个非常简单的方法是检查当前的 focus widget 是否每当选项卡更改时,它都是 QDockWidget 的后代,然后在必要时重置焦点:

from PyQt5.QtWidgets import QApplication, QMainWindow, QDockWidget, QTextEdit
from PyQt5.QtCore import Qt

class DockWidget(QDockWidget):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setWidget(QTextEdit(self))
self.visibilityChanged.connect(self.updateFocus)

def updateFocus(self, visible):
if visible:
widget = QApplication.instance().focusWidget()
while widget is not None:
if isinstance(widget, QDockWidget):
widget = None
elif widget.parentWidget() is not None:
widget = widget.parentWidget()
else:
break
if widget is None:
self.setFocus()
self.focusNextChild()

app = QApplication([''])
main = QMainWindow()
main.setCentralWidget(QTextEdit(main))

dock1 = DockWidget("D1", main)
main.addDockWidget(Qt.TopDockWidgetArea, dock1)

dock2 = DockWidget("D2", main)
main.tabifyDockWidget(dock1, dock2)

main.show()
app.exec()

关于python - 在选项卡式停靠小部件中重置焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50134036/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com