- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在 Win10 和 Python 3.6.6 上使用 VS Code。
此链接提供了在我正在使用的升级小部件上创建图形的相同方法:
https://stackoverflow.com/a/56492312/6284847
我希望能够根据 qcombobox 中选择的形状创建一些其他图形。我遇到的两个问题是:
使用函数/方法将组合框中的索引或字符串值返回到我的 Drawer 类。这种方法,https://stackoverflow.com/a/56560455/6284847 ,展示了如何从类中打印索引/字符串值,但我无法在函数/方法中返回 qcombobox 索引/字符串值并在另一个类中使用该函数/方法。我读到不可能在不同的 SO 主题中返回这些值,但必须有一种方法来实现这一点。
除了应用程序最初运行时之外,我真的不知道如何重新绘制小部件。
任何其他方式来重组这些事情也能实现这一点,我们非常感激!
testUI.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>996</width>
<height>892</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QGraphicsView" name="graphicsView">
<property name="minimumSize">
<size>
<width>0</width>
<height>200</height>
</size>
</property>
</widget>
</item>
<item>
<widget class="Drawer" name="widget" native="true">
<property name="minimumSize">
<size>
<width>0</width>
<height>250</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>16777215</width>
<height>300</height>
</size>
</property>
<property name="styleSheet">
<string notr="true"/>
</property>
</widget>
</item>
<item>
<widget class="QComboBox" name="comboBox"/>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>996</width>
<height>21</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<customwidgets>
<customwidget>
<class>Drawer</class>
<extends>QWidget</extends>
<header>myDrawWidget</header>
<container>1</container>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>
paintEventTest.py
import sys
from PySide2 import QtWidgets
from PySide2 import QtGui
from PySide2 import QtCore
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import (
QApplication, QPushButton, QLineEdit, QTextEdit, QSpinBox, QMainWindow, QDesktopWidget, QTableWidget,
QTableWidgetItem, QToolButton, QToolTip)
from PySide2.QtCore import QFile, QObject, Qt
from myDrawWidget import Drawer
class UiLoader(QUiLoader):
def createWidget(self, className, parent=None, name=""):
if className == "Drawer":
widget = Drawer(parent)
widget.setObjectName(name)
return widget
return super(UiLoader, self).createWidget(className, parent, name)
class MainForm(QMainWindow):
def __init__(self, ui_file, parent=None):
super(MainForm, self).__init__(parent)
ui_file = QtCore.QFile(ui_file)
ui_file.open(QtCore.QFile.ReadOnly)
### Load UI file from Designer ###
loader = UiLoader()
self.ui_window = loader.load(ui_file)
ui_file.close()
self.initUI()
self.ui_window.show()
def initUI(self):
#region widget code
widget = self.ui_window.widget
widget.setStyleSheet("""
QWidget {
border: 1px solid lightgrey;
border-radius: 2px;
background-color: rgb(255, 255, 255);
}
""")
#endregion
sectionList = []
sectionList.append("Rectangle")
sectionList.append("Diamond")
sectionList.append("Circle")
sectionList.append("Box")
sectionList.append("T-Section")
sectionList.append("I-Section")
ComboBox = self.ui_window.comboBox
#comboBox = QtWidgets.QComboBox #Just to get intellisense working. Gets commented out
ComboBox.setCurrentIndex(0)
for item in sectionList:
ComboBox.addItem(item)
#ComboEvent = comboBoxEvent(ComboBox)
ComboBox.currentIndexChanged.connect(self.cbEvent)
# #print(ComboBox.itemText(ComboBox.currentIndex()))
def cbEvent(self, index):
text = self.ui_window.comboBox.itemText(index)
print(str(text))
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setStyle('Fusion')
form = MainForm('./UI_designer/testUI.ui')
sys.exit(app.exec_())
myDrawWidget.py
class Drawer(QtWidgets.QWidget):
index = None
def paintEvent(self, e):
'''
the method paintEvent() is called automatically
the QPainter class does all the low-level drawing
coded between its methods begin() and end()
'''
index = Drawer.index
##############################################
# IMPLEMENT CODE TO GET INDEX FROM QCOMBOBOX
# HOW TO?
##############################################
### Applying QSS style on the widget ###
opt = QtWidgets.QStyleOption()
opt.init(self)
qp = QtGui.QPainter()
qp.begin(self)
self.style().drawPrimitive(QtWidgets.QStyle.PE_Widget, opt, qp, self)
if index == None:
self.init_drawGeometry(qp)
elif cb_index == 0:
self.drawGeometry(qp)
else:
self.drawGeometry_two(qp)
qp.end()
def init_drawGeometry(self, qp):
qp = QtGui.QPainter(self)
qp.setPen(QtGui.QPen(QtCore.Qt.red, 8, QtCore.Qt.DashLine))
qp.drawEllipse(40, 40, 400, 400)
def drawGeometry(self, qp):
qp = QtGui.QPainter(self)
qp.setPen(QtGui.QPen(QtCore.Qt.green, 8, QtCore.Qt.DashLine))
qp.drawEllipse(40, 40, 400, 400)
def drawGeometry_two(self, qp):
qp = QtGui.QPainter(self)
qp.setPen(QtGui.QPen(QtCore.Qt.blue, 8, QtCore.Qt.DashLine))
qp.drawEllipse(40, 40, 400, 400)
@QtCore.Slot()
def returnComboBoxIndex(self, index):
print(index)
return index
编辑1:
我尝试从 qcombobox 获取索引或值,但无法实现。我已经更新了 myDrawWidget.py 并评论了我认为我必须实现代码才能达到我的目标的地方,即在激活 qcombobox 时绘制不同的形状颜色。
最佳答案
所以这个问题很容易解决。首先,我们必须连接到 Drawer.py 中的 returnComboBoxIndex
,然后将已经创建的类变量 Drawer.index
分配给返回的索引。
paintEventTest.py
cb_event = Drawer(self)
ComboBox.activated[int].connect(cb_event.returnComboBoxIndex)
myDrawWidget.py
改变这个
@QtCore.Slot()
def returnComboBoxIndex(self, index):
print(index)
return index
对此:
@QtCore.Slot()
def returnComboBoxIndex(self, index):
Drawer.index = index
print(index)
关于python - 当 qcombobox 索引更改覆盖 QUiloader 时,PySide2 在小部件上重新绘制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58837335/
我使用 Qt Designer 来构建我的 UI 布局。在布局上,我有一个名为 cb_fac_cd 的组合框.在我的代码中,我有一个函数可以根据我尝试构建的列表自动构建一个组合框。我在数据库中定义了很
我正在创建带有复选框的 QComboBox。如何防止鼠标单击时 View 折叠?我希望能够设置复选框,但是每次单击项目时 - QComboBox 的下拉菜单都会折叠起来。 注意:目前我正在调试 Qt
我为 QComboBox 创建了模型: #ifndef QCOMBOBOXMODEL_H #define QCOMBOBOXMODEL_H #include class QComboBoxModel
我如何实现 QComboBox允许您从树结构中进行选择,类似于 QTreeView ? 最佳答案 我在 developer.nokia.com( Part 1 , Part 2 )上使用两部分配方想出
当 QComboBox 的 currentIndex 更改时,我需要使用 currentIndex+1 调用函数。今天早上我在语法上苦苦挣扎: // call function readTables(
我正在 PyQt 中开发一个应用程序,该应用程序采用对象字典,并允许您实时绘制从机器人流式传输的变量。我正在努力启用此功能的一件事是下拉菜单。不幸的是,我们有几百个变量,所以我的 PyQt Combo
我想把 QComboBox变成 QStandardItem用于 QStandardItemModel .我一直在环顾四周,我找不到答案,有什么想法吗? 最佳答案 您不存储 QComboBox在 QSt
我的 ui 上有一个 QComboBox 并像这样设置模型: QStringListModel* model = new QStringListModel; QStringList stringlis
我正在尝试在 QT5 中设置组合框的样式。我使用 QT Creator 进行布局并在启动时加载应用程序范围的样式表。 我与组合框相关的CSS如下: QComboBox { color:whit
我在输入表单上有一个可编辑组合框,其背景在接收焦点时必须更改。以下代码适用于 QLineEdit,但对 QComboBox 没有影响。 QLineEdit, QComboBox { backgroun
我想知道 QComboBox 中有多少像素需要这个项目: 红色 - 复选框 绿色 - 复选框结尾和文本开头之间的距离 蓝色 - 边框末端和复选框开始之间的距离 在 QStyle 的文档中,我找到了两种
从“正常”QCombobox开始 我想要一个 QCombobox,它仅在展开时显示图标,但在折叠时不显示。 我找到了类似问题的几个答案,但它们都显示了更复杂情况的代码,而我还没有设法提取其核心。 我见
我工作的应用程序 GUI 需要一个组合框供用户选择项目。当应用程序启动时,组合框将显示类似于“请选择”的提示文本,而不是显示组合框的第一项。我在 http://doc.qt.io/qt-5/qcomb
我想设计我的 QComboBox与下拉项目的 margin 。这是现在的样子: 我想要这样的东西: 我试过 QComboBox QAbstractItemView::item { margin
这是我的代码片段: self.cursor.execute("MATCH (n:Person) RETURN n.firstname, n.lastname") for i in self.curso
通常我会通过说将项目添加到 QCombobox: QCombobox cbb; cbb.addItem("Hello"); 但是如果我尝试这个,我会得到一个错误: QComboBox cbb; QSt
我发现在最新的 Qt 版本中(目前我使用的是 5.4.1,但在 5.2 中是一样的)如果我将几个项目添加到 QComboBox 并将鼠标光标定位在特定位置,它会自行滚动,这确实是烦人……我想。 我在
当 QComboBox 的下拉列表打开时,键盘输入被用作(不是特别聪明的)搜索元素的方式。我想禁用它并将键盘事件的处理传播到父小部件。怎么办呢?我已经尝试在子类中重新实现 keyPressEvent
我有一个数据库,其中包含两种类型的同一事物。假设我有动物,然后两种类型是鸟类和鱼类。我想要一个将两者组合在一起的组合框。所以基本上你可以选择任何动物,一些鸟或一些鱼。 在组合框中,我想显示数据库中所有
我已将 QComboBox 子类化以根据特殊需要对其进行自定义。该子类用于在 QtDesigner 的 ui 文件中提升 QComboBoxes。一切正常,除了当我在插槽中放置断点时,程序不会在断点处
我是一名优秀的程序员,十分优秀!