Python 2.7 如何更改Pyside2中QTabWidget中特定选项卡的字体?
触发事件后,我希望将特定选项卡的字体更改为粗体,而不是非粗体Python 2.7 如何更改Pyside2中QTabWidget中特定选项卡的字体?,python-2.7,qt,pyside2,qtabwidget,Python 2.7,Qt,Pyside2,Qtabwidget,触发事件后,我希望将特定选项卡的字体更改为粗体,而不是非粗体 qtabwidget.tabs[4].setFontWeight(Bold) 如何做到这一点?一种可能的解决方案是使用QProxyStyle: import sys from PySide2 import QtCore, QtGui, QtWidgets class TabBarStyle(QtWidgets.QProxyStyle): def drawControl(self, element, option, pa
qtabwidget.tabs[4].setFontWeight(Bold)
如何做到这一点?一种可能的解决方案是使用QProxyStyle:
import sys
from PySide2 import QtCore, QtGui, QtWidgets
class TabBarStyle(QtWidgets.QProxyStyle):
def drawControl(self, element, option, painter, widget=None):
index = -1
if element == QtWidgets.QStyle.CE_TabBarTab:
if isinstance(widget, TabBar):
for i in widget.fonts.keys():
if widget.tabRect(i) == option.rect:
index = i
break
if index > -1:
painter.save()
painter.setFont(widget.fonts[index])
super(TabBarStyle, self).drawControl(element, option, painter, widget)
if index > -1:
painter.restore()
class TabBar(QtWidgets.QTabBar):
def __init__(self, parent=None):
super(TabBar, self).__init__(parent)
self._fonts = dict()
@property
def fonts(self):
return self._fonts
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.tab_widget = QtWidgets.QTabWidget()
self.setCentralWidget(self.tab_widget)
self.tab_bar = TabBar()
self.tabbar_style = TabBarStyle(self.tab_bar.style())
self.tab_bar.setStyle(self.tabbar_style)
self.tab_widget.setTabBar(self.tab_bar)
self.tab_widget.addTab(QtWidgets.QWidget(), "Foo")
self.tab_widget.addTab(QtWidgets.QWidget(), "Bar")
self.tab_widget.addTab(QtWidgets.QWidget(), "Baz")
font = self.tab_widget.font()
font.setBold(True)
self.tab_bar.fonts[1] = font
self.tab_bar.update()
def main():
app = QtWidgets.QApplication(sys.argv)
app.setStyle("fusion")
w = MainWindow()
w.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
一种可能的解决方案是使用QProxyStyle:
import sys
from PySide2 import QtCore, QtGui, QtWidgets
class TabBarStyle(QtWidgets.QProxyStyle):
def drawControl(self, element, option, painter, widget=None):
index = -1
if element == QtWidgets.QStyle.CE_TabBarTab:
if isinstance(widget, TabBar):
for i in widget.fonts.keys():
if widget.tabRect(i) == option.rect:
index = i
break
if index > -1:
painter.save()
painter.setFont(widget.fonts[index])
super(TabBarStyle, self).drawControl(element, option, painter, widget)
if index > -1:
painter.restore()
class TabBar(QtWidgets.QTabBar):
def __init__(self, parent=None):
super(TabBar, self).__init__(parent)
self._fonts = dict()
@property
def fonts(self):
return self._fonts
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.tab_widget = QtWidgets.QTabWidget()
self.setCentralWidget(self.tab_widget)
self.tab_bar = TabBar()
self.tabbar_style = TabBarStyle(self.tab_bar.style())
self.tab_bar.setStyle(self.tabbar_style)
self.tab_widget.setTabBar(self.tab_bar)
self.tab_widget.addTab(QtWidgets.QWidget(), "Foo")
self.tab_widget.addTab(QtWidgets.QWidget(), "Bar")
self.tab_widget.addTab(QtWidgets.QWidget(), "Baz")
font = self.tab_widget.font()
font.setBold(True)
self.tab_bar.fonts[1] = font
self.tab_bar.update()
def main():
app = QtWidgets.QApplication(sys.argv)
app.setStyle("fusion")
w = MainWindow()
w.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
没有单独的“制表符”,QTabar绘制所有的“制表符”您显然有XY问题,因为您询问如何实现可能的解决方案(没有人保证它能工作):如何获取QTabWidget的当前制表符,而不是询问潜在问题:如何从当前制表符中将字体设置为粗体谢谢,那么,如何更改特定选项卡的样式表呢?我应该更新这些问题吗?1)你必须重写你的问题,2)要更改字体,不仅可以使用Qt样式表,所以不要只问问题:如何更改当前选项卡的字体?运行时会得到什么:
print(QApplication.style(),metaObject().className())
?没有单独的“选项卡”,QTabBar绘制所有“选项卡”您显然有XY问题,因为您询问如何实现可能的解决方案(没有人保证它有效):如何获取QTabWidget的当前选项卡,而不是询问潜在问题:如何从当前选项卡将字体设置为粗体谢谢,那么,如何更改特定选项卡的样式表呢?我应该更新这些问题吗?1)你必须重写你的问题,2)要更改字体,不仅可以使用Qt样式表,所以不要问问题,而不仅仅是问题:如何更改当前选项卡的字体?运行时得到什么:print(QApplication.style(),metaObject().className())
?非常感谢,在哪里指定要在代码中设置粗体的选项卡?此代码是否将特定的制表符设置为粗体?在初始问题中,您希望更改所选元素的字体。。。我注意到,你也改变了你的注意力,让我纠正它。是的,不用担心:不知怎么地,在运行代码之后,我得到了这个错误:内部C++对象(PySt2.2.qtWistGo.QStar)已经删除,并崩溃了。我复制了所有内容,但只有在self.tab\u bar=TabBar()处停止时才不会崩溃。如果我添加下一行,同样的错误也会发生。这是出于某种原因而产生的。还有,为什么在其他GUI框架中,可以用一行代码完成的一些琐碎的事情,通常需要很多代码来完成同样的事情?作为Qt方面的专家,您认为这是设计缺陷还是仅仅是短视?非常感谢,您在哪里指定要在代码中设置粗体的选项卡?此代码是否将特定的制表符设置为粗体?在初始问题中,您希望更改所选元素的字体。。。我注意到,你也改变了你的注意力,让我纠正它。是的,不用担心:不知怎么地,在运行代码之后,我得到了这个错误:内部C++对象(PySt2.2.qtWistGo.QStar)已经删除,并崩溃了。我复制了所有内容,但只有在self.tab\u bar=TabBar()处停止时才不会崩溃。如果我添加下一行,同样的错误也会发生。这是出于某种原因而产生的。还有,为什么在其他GUI框架中,可以用一行代码完成的一些琐碎的事情,通常需要很多代码来完成同样的事情?作为Qt的专家,你认为这是一个设计缺陷还是仅仅是短视?