【发布时间】:2018-05-02 11:51:55
【问题描述】:
目前我在标签化 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 在切换到选项卡小部件的另一个选项卡时不会失去焦点。
- 在其中一个字段中写入文本
- 点击QTabBar上的另一个Tab
- 继续键盘输入
你写的第二个文本仍然是第一个小部件的焦点。
所以,总的来说:
有没有办法让标签化小部件失去焦点,无论它是QTextEdit 还是其他一些小部件(甚至可能具有复杂的子布局结构)?
我在QDockWidget 上尝试了clearFocus(),但如果 QDockWidget 本身包含焦点(不是它的子元素),这似乎可行。
在之前使用setFocus() 似乎也不是一个好的选择,因为小部件(或其子部件)可能不会在每种情况下都包含焦点。因此,从其他小部件中窃取它是不合适的。
我认为最好的反应锚是:
-
QDockWidget::visibilityChanged(bool visible)(if visible == False) QMainWindow::tabifiedDockWidgetActivated(QDockWidget *dockWidget)
如果你能找到动态创建的 QTabBar:
-
QTabBar::currentChanged(int index)(“必须有更好的方法......”)
【问题讨论】:
标签: python pyqt focus pyqt5 qdockwidget