- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个应用程序,我希望 QTabBar 位于与 QTabWidget 区域不同的 VBoxLayout 中。它可以使用下面的代码工作,但我遇到了样式问题。在我将 QTabBar 与 QTabWidget 分开之前,我没有遇到任何问题,但现在我不知道如何按照我想要的方式设置它的样式。
#!/usr/bin/env python2
from PyQt4 import QtGui, QtCore
from peaks import *
class mainWindow(QtGui.QWidget):
def __init__(self):
QtGui.QWidget.__init__(self)
self.setWindowFlags(QtCore.Qt.Dialog)
self.tabWidget = QtGui.QTabWidget()
self.tabBar = QtGui.QTabBar()
self.tabBar.setContentsMargins(0,0,0,0)
self.tabWidget.setTabBar(self.tabBar)
self.tabWidget.setTabPosition(QtGui.QTabWidget.West)
self.tabWidget.setIconSize(QtCore.QSize(35, 35))
self.tab1 = QtGui.QWidget()
self.tab2 = QtGui.QWidget()
tabLayoutBox = QtGui.QVBoxLayout()
tabLayoutBox.setContentsMargins(0,0,0,0)
tabLayoutBox.addWidget(self.tabBar)
mainHBox = QtGui.QHBoxLayout()
mainHBox.setContentsMargins(0,0,0,0)
mainHBox.setSpacing(0)
mainHBox.setMargin(0)
mainHBox.addLayout(tabLayoutBox)
mainHBox.addWidget(self.tabWidget)
mainVBox = QtGui.QVBoxLayout()
mainVBox.addWidget(QtGui.QWidget())
mainVBox.addLayout(mainHBox)
self.setLayout(mainVBox)
self.tabWidget.addTab(self.tab1, 'tab1')
self.tabWidget.addTab(self.tab2, 'tab2')
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
app.setStyleSheet(
"QTabBar { alignment: right; }"
"QTabBar::tear { width:0; border: none; }"
"QTabBar::scroller { width:0; border: none; }"
)
main = mainWindow()
main.show()
sys.exit(app.exec_())
但是有一些我想要但不知道该怎么做的事情:
我想消除 QTabWidget 和 QTabBar 之间的差距。我一直在尝试各种方法,例如 setContentsMargins(0,0,0,0)
和设置样式表,但我尝试过的都没有效果。
我希望 QTabBar 与 QTabWidget 的顶部齐平。有趣的是,无论何时调整窗口大小时,选项卡似乎都会在顶部之间快速来回切换。
我看过的东西:
更新:我可以通过将 QTabBar miminumSizeHint() 设置为 (15,15) 并设置 QTabBar::tab { margin-right: -15px; 来模拟我想要的行为}
但这并不能让我实际点击标签。出于某种原因,选项卡下方(即右侧)有一个空间,我不知道如何摆脱它。
第二次更新:我已经确定了我认为的主要问题。我的代码使用
self.tabWidget.setTabPosition(QtGui.QTabWidget.West)
将选项卡移动到左侧,但 QTabWidget 假定那里有一个 tabBar,因此会有额外的空间。如果我这样做
self.tabWidget.setTabPosition(QtGui.QTabWidget.East)
那个空白出现在右边。所以我能做的一件事是直接在 tabBar 上设置 tabShape:
self.tabBar.setShape(QtGui.QTabBar.RoundedWest)
然而,这会在 QTabWidget 期望 QTabBar 所在的顶部留下一个空白区域。我可以在 setShape
之前使用 setTabPosition
将该空间向右移动,但这并不能解决实际摆脱它的问题。
最佳答案
我无法弄清楚如何隐藏空白区域,所以我只是使用了一个非常容易实现的 QTabBar + QStackedWidget。为了使一个像 QTabWidget 一样,您需要做的就是将 QTabBar.currentChanged
连接到 QStackedWidget.setCurrentIndex
:
self.stacked = QtGui.QStackedWidget()
self.tabBar = QtGui.QTabBar()
self.tabBar.currentChanged.connect(self.stacked.setCurrentIndex)
self.tabBar.setShape(QtGui.QTabBar.RoundedWest)
self.tabBar.updateGeometry()
self.tabBar.setContentsMargins(0,0,0,0)
我还编写了一个模拟 QTabWidget.addTab
的便捷函数:
def addTab(self, widget, name):
self.stacked.addWidget(widget)
self.tabBar.addTab(name)
关于python - 从 QLayout 中的 QTabBar 中删除填充/边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30049375/
我有一个包含其他布局(子布局)的布局。我需要从布局中删除包含内容的子布局。我该怎么做? QVBoxLayout* mainLayout = new QVBoxLayout; QHBoxLayout*
我想创建一些标签,我阅读了这个答案:How to add a tab in PySide 我使用答案中的代码并进行了一些更改。因为我的代码必须读取一些文件并从这些文件中获取我的选项卡的名称,所以我在我
我想创建一个窗口,其中Qt3DWindow在后面,一些QPushButton在它上面。但是,仅显示 Qt3DWindow 动画,而看不到 QPushButton。我还希望有 Qt3DWindow 功能
我有QLayout接受 QLabel 的类(class)并将其对齐为 Qt::AlignRight在单元格中,最初我认为它正在工作(因为布局单元格的大小正好等于像素图的大小),我有一个与 QLabel
我正在寻找一个 super 简单的示例,但似乎找不到。我有一个主窗口。当按下按钮时,我想创建一个新窗口,该窗口在 MainWindow 的布局中打开,成为主窗口的一部分。 我有代码在按下按钮调用这个插
这让我发疯。我有一个自定义菜单类,当设置为可见时,它会显示位于特定文件夹中的项目列表。当按下硬件按钮时,我的应用程序获取最新的项目列表,用它们填充菜单,然后返回。 显示这些项目的菜单使用填充了自定义小
我正在使用 QHBoxLayout 显示 5 个水平对齐的小部件。 如果我隐藏和显示一个小部件,它会调整大小。我该如何防止这种情况发生? 最佳答案 你不能。如果您隐藏了一个小部件,它就会从屏幕上消失,
我有一个 Qt4 应用程序,它有很多对话框。我很想知道 QDialog 是否删除了它的布局。举个例子: class MyDialog : public QDialog { public:
我的结构如下: QWidget -QHBoxLayout -QLabel -QVBoxLayout -QLabel
我知道我可以向QPushButton 添加Icon 和Text,但我对它们的布局不满意。有没有办法将带有我想要的任何控件的 QLayout 添加到 QPushButton?例如,我可以有一个 Icon
我正在尝试实现这个 CardLayout 示例 https://doc.qt.io/qt-5/layout.html但是当我尝试编译给定的文件 card.h 时,它无法提示 QLayout 的构造函数
我能够找到 QRadioButton这样: for(int i = 0; i verticalLayout->count(); i++) { QRadioButton* r = qobject
例如,我们在 QMainWindow 中有 QHBoxLayout。 让我们在上面的布局中设置小部件。 但是 (!) 很少有小部件具有离散的视觉表示。换句话说,它们几乎没有依赖于可用空间的状态。 例如
我从 Qt 文档中知道 QLayout 对象拥有其小部件的所有权。但就 QLayout 对象而言,在堆栈上创建它然后使用 setLayout 函数将其传递给小部件是否安全?还是必须在堆上创建? #in
我正在尝试实现一个由一堆子元素组成的 UI 元素。它们可以像 parent 一样增长或缩小。非常简单 QLayout东西。然而,当父元素变得太小时,它会隐藏几个子元素(这意味着现在有更多的空间可以容纳
我正在实现一个选项卡样式的 UI。其中选项卡由 QListWidget 显示,内容由 QStackedWidget 显示。在 QStackWidget 的每一页上都有允许在 QHBoxlayout 中
我有两个示例,其中我基本上是在创建包装器对象,而不是理想情况下的简单转换。 如果 foo 是之前实例化的 QWidget*,我是否可以避免为其创建包装器 QLayout: const auto lay
我正在尝试在布局中放置一些旋转框、行编辑。但规模超出了必要性。下面是图 我在这里添加了一个 QScrollArea 小部件和一个 QVBoxLayout 到 QHBoxLayout 中。然后我将行编辑
执行时(没有编译错误)我进入控制台 QWidget::setLayout: Attempting to set QLayout "" on CGSearchResult "", which alrea
我正在为 Blender 做一个插件,并且正在使用 PySide2。我能够删除窗口标题并仅显示窗口的内容。我在 QFrame 中插入了一个动画 gif 并更改了它的边框。问题是容器仍然出现尖锐的边框。
我是一名优秀的程序员,十分优秀!