gpt4 book ai didi

python - 从 QComboBox 中的样式列表中使用 QStyleFactory 设置样式

转载 作者:太空宇宙 更新时间:2023-11-03 14:25:45 25 4
gpt4 key购买 nike

我一直在使用 PyQt4 实现一个应用程序。

screenshot2

在这个应用中我想根据用户的选择来设置样式,并且我想在不重新启动对话框的情况下设置样式。

这是影响样式区域的我的一段代码:

import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import QtGui

styles = ["Plastique","Cleanlooks","CDE","Motif","GTK+"]

class AppWidget(QWidget):
def __init__(self,parent=None):
super(AppWidget,self).__init__(parent)

global styles # declaring global

# I've skipped the useless codes

horizontalLayout = QHBoxLayout()
self.styleLabel =QLabel("Set Style:")
self.styleComboBox = QComboBox()
self.styleComboBox.addItems(styles) # adding the styles list
horizontalLayout.addWidget(self.styleLabel)
horizontalLayout.addWidget(self.styleComboBox)

# skip more code

self.setLayout(layout)

def getStyle(self):
return self.styleComboBox.currentIndex() # get the current index from combobox

# another way i also implement is :
# return self.styleComboBox.currentText()
# after that i remove the global and directly access using this method
# which is of no success

if __name__ == "__main__":
global styles # declaring global
app = QApplication(sys.argv)
widgetApp = AppWidget()

i = widgetApp.getStyle() # assign the index here
QtGui.QApplication.setStyle(QtGui.QStyleFactory.create(styles[i])) # setting the style

widgetApp.show()
app.exec_()
print i

但我一直只得到“Plastique”样式。

最佳答案

您不需要全局样式列表,因为它已经可以从QStyleFactory.keys 获得。 .

您需要做的是将这些键加载到组合框中,将组合框索引设置为当前样式,然后将组合框 activated 信号连接到处理程序,以便样式可以更改。

像这样的东西应该可以工作:

import sys
from PyQt4 import QtCore, QtGui

class AppWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(AppWidget, self).__init__(parent)
horizontalLayout = QtGui.QHBoxLayout()
self.styleLabel = QtGui.QLabel("Set Style:")
self.styleComboBox = QtGui.QComboBox()
# add styles from QStyleFactory
self.styleComboBox.addItems(QtGui.QStyleFactory.keys())
# find current style
index = self.styleComboBox.findText(
QtGui.qApp.style().objectName(),
QtCore.Qt.MatchFixedString)
# set current style
self.styleComboBox.setCurrentIndex(index)
# set style change handler
self.styleComboBox.activated[str].connect(self.handleStyleChanged)
horizontalLayout.addWidget(self.styleLabel)
horizontalLayout.addWidget(self.styleComboBox)
self.setLayout(horizontalLayout)

# handler for changing style
def handleStyleChanged(self, style):
QtGui.qApp.setStyle(style)

if __name__ == "__main__":

app = QtGui.QApplication(sys.argv)
widgetApp = AppWidget()
widgetApp.show()
sys.exit(app.exec_())

关于python - 从 QComboBox 中的样式列表中使用 QStyleFactory 设置样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20959181/

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