天道酬勤,学无止境

通过一个按钮使用python在qt上将两个不同的小部件连接在一起(Connecting two different widgets together on qt with python through a button)

问题

我想知道如何将两个小部件连接在一起。 我在 QtDesigner 上创建了两个小部件,一个是登录页面,另一个是主菜单。 我想连接它们,以便当登录成功时,用户将被重定向到主窗口,并且登录小部件将自动关闭。 有谁知道如何做到这一点?

附注。 我有主菜单的代码并在单独的 .py 文件中登录

回答1

您可以执行以下操作:

在您的 QApp 中,首先创建一个包含登录小部件的对话框并执行该对话框。 根据结果​​,要么(如果登录失败)退出应用程序(或重新提示用户登录),要么(如果登录成功)实例化主窗口并显示它。

或:实例化并显示主窗口。 立即显示带有登录小部件的应用程序模式对话框。 根据结果​​,恢复操作或退出应用程序。

这是一些代码的片段,提示用户登录并根据数据库进行检查。 登录对话框在另一个文件中定义为 DlgLogin。

#many imports
from theFileContainingTheLoginDialogue import DlgLogin

class MainWindow (QtGui.QMainWindow):
    def __init__ (self, parent = None):
        super (MainWindow, self).__init__ ()
        self.ui = Ui_MainWindow ()
        self.ui.setupUi (self)
        dlg = DlgLogin (self)
        if (dlg.exec_ () == DlgLogin.Accepted):
            #check here whether you accept or reject the credentials
            self.database = Database (*dlg.values)
            if not self.database.check (): sys.exit (0)
        else:
            sys.exit (0)
        self.mode = None

对话类如下(有两个用于凭据的行编辑小部件):

from PyQt4 import QtGui
from dlgLoginUi import Ui_dlgLogin

class DlgLogin (QtGui.QDialog):
    def __init__ (self, parent = None):
        super (DlgLogin, self).__init__ ()
        self.ui = Ui_dlgLogin ()
        self.ui.setupUi (self)

    @property
    def values (self):
        return [self.ui.edtUser.text (), self.ui.edtPassword.text () ]

应用程序本身是这样写的:

#! /usr/bin/python3.3

import sys
from PyQt4 import QtGui
from mainWindow import MainWindow

def main():
    app = QtGui.QApplication (sys.argv)
    m = MainWindow ()
    m.show ()
    sys.exit (app.exec_ () )

if __name__ == '__main__':
    main ()

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Qt事件和信号/插槽(Qt events and signal/slots)
    问题 在Qt世界中,事件和信号/时隙有什么区别? 一个会替代另一个吗? 事件是信号/时隙的抽象吗? 回答1 Qt文档可能最好地解释了这一点: 在Qt中,事件是从抽象QEvent类派生的对象,它们表示发生在应用程序内部或由于应用程序需要了解的外部活动而发生的事情。 事件可以由QObject子类的任何实例接收和处理,但它们与小部件尤其相关。 本文档介绍了在典型应用程序中如何传递和处理事件。 因此,事件和信号/时隙是完成相同任务的两种并行机制。 通常,事件将由外部实体(例如,键盘或鼠标滚轮)生成,并将通过QApplication的事件循环传递。 通常,除非设置代码,否则将不会生成事件。 您可以通过QObject::installEventFilter()过滤它们,或者通过重写适当的函数来处理子类对象中的事件。 信号和插槽更容易生成和接收,您可以连接任何两个QObject子类。 它们是通过元类处理的(更多信息请参见moc_classname.cpp文件),但是您将产生的大多数类间通信可能都将使用信号和插槽。 信号可以立即传递,也可以通过队列延迟(如果使用线程)。 可以产生信号。 回答2 在Qt中,信号和事件都是观察者模式的实现。 由于它们具有不同的优点和缺点,因此它们在不同的情况下使用。 首先,让我们精确地定义“ Qt事件”的含义:Qt类中的虚函数,如果您想处理事件
  • 需要在Windows上将应用程序置于前台(Need to bring application to foreground on Windows)
    问题 我有两个正在Windows上使用Qt开发的应用程序。 我希望用户能够在一个应用程序中按下按钮,从而使另一个应用程序成为前台。 (程序使用QLocalSocket和命名管道进行通信。) 当前,我正在使用Qt的QWidget :: activateWindow(),偶尔将应用程序置于前台,但是大多数情况下,它只是突出显示任务栏上的程序。 有人可以告诉我该怎么做,最好是使用Qt,尽管不能使用WIN32 API会很好。 不幸的是,我找不到仅使用Qt来做到这一点的方法。 我使用Chris Becke的建议从当前活动的应用程序中调用SetForegroundWindow来解决该问题。 回答1 您确定这不是调试问题吗? 关键是,如果应用程序具有前台,则允许它更改前台。 单击窗口A上的按钮将使该Windows线程前台激活。 如果它在另一个窗口上调用SetForegroundWindow(或等效窗口),则该窗口将被赋予前景。 另一方面,如果它只是将消息发送到另一个应用程序,而该应用程序本身尝试使用SetForeground,则该操作将失败。 AllowSetForegroundWindow用于需要“旧式”应用程序(由前台应用程序授予权限)以获取前台的情况。 同样,AllowSet ...仅当从拥有当前活动前台窗口的线程中调用时才起作用。 回答2 在QWidget
  • 拖动n下拉按钮和下拉菜单PyQt / Qt设计器(Drag n Drop Button and Drop-down menu PyQt/Qt designer)
    问题 我想知道“最佳实践”来更改某些按钮的行为以执行以下操作: 我想要单击以显示一个菜单。 或者,当您拖动同一按钮时,可以将其放在另一个按钮中,这将“画出”一条连接它们的线。 这是一个例子: 这个想法是将那些“杰克”按钮连接到任何其他“输入”按钮。 我使用的是Qt设计器,但我意识到按钮属性仅列出了“ acceptDrops”属性,但我无法使其正常工作。 信号/插槽未列出有关拖放的内容。 因此,我认为唯一的方法就是通过代码创建“自定义小部件”或“重新实现”按钮。 信号/插槽也许是同一回事 如果我不想修改pyuic生成的文件,这样做的最佳方法是什么? 更新:我尝试的方法是使用Qt设计器和“提升的小部件”选项。 这使我可以创建单独的类文件并重新实现某些元素。 我已经通过将PushButton提升为“ DragButton”进行了测试,并为其创建了一个类: 从PyQt4导入QtGui,QtCore 类DragButton(QtGui.QPushButton): def __init__(self, parent): super(DragButton, self).__init__(parent) self.allowDrag = True def setAllowDrag(self, allowDrag): if type(allowDrag) == bool: self
  • 学习笔记之Qt从入门到精通(三)
    整理日期: 2010年4月9日 本文是学习笔记之Qt从入门到精通(二)的接续 Part 3: 进阶学习 Qt4 学习笔记 Qt 可以运行在不同的平台,像是Unix/X11、Windows、Mac OS 与支援framebuffer 的嵌入式Linux 平台(Embedded Linux Platform),所使用的版本为Qt OpenSource 4.3.3 版, 在Vista 作业系统下撰写。 入门 先来尝试一下几个简单的Qt 程式,并初步了解一些核心特性。  Hello!World! Orz… 第一步,当然是先克服Qt 的安装问题,然后来个简单的Hello!World! Orz… o Windows XP/Vista 下安装Qt4 o 第一个Qt 程式 o 简单的显示中文(使用Unicode 转换)  Signal 与Slot Signal 与Slot 是Qt 的特性,让物件之间可以同步的(Synchronous)通知讯息, 但又不必知道彼此, Signal 是由物件发出。 o 使用Signal 与Slot(使用按钮关闭视窗) o 使用Signal 与Slot(使用拉杆改变LCD 数字) o 自订Signal 与Slot  事件处理 事件基本上是非同步的(Asynchronousd),通常由视窗或系统发出,让应用程式可以回应使用者动作或系统讯息。 o 事件类型与处理者 o
  • 从后台工作线程修改Qt GUI(Modify Qt GUI from background worker thread)
    问题 我在Qt工作,当我按GO按钮时,我需要不断将软件包发送到网络并使用接收到的信息修改界面。 问题是我在按钮中有一个while(1) ,所以按钮永不结束,所以接口永不更新。 我想在按钮上创建一个线程,然后在其中放置while(){}代码。 我的问题是如何从线程修改接口? (例如,如何从线程修改textBox? 回答1 关于Qt的重要一点是,必须仅从GUI线程(即主线程)使用Qt GUI。 这就是为什么执行此操作的正确方法是从worker通知主线程,并且主线程中的代码实际上将更新文本框,进度栏或其他内容。 我认为,做到这一点的最佳方法是使用QThread而不是posix线程,并使用Qt信号在线程之间进行通信。 这将是您的工作人员,是thread_func的替代者: class WorkerThread : public QThread { void run() { while(1) { // ... hard work // Now want to notify main thread: emit progressChanged("Some info"); } } // Define signal: signals: void progressChanged(QString info); }; 在窗口小部件中,定义一个与.h中的信号具有相同原型的插槽: class MyWidget
  • 在Ubuntu的QT5中将透明QWidget放在QMediaView之上(Put transparent QWidget on top of QMediaView in QT5 on Ubuntu)
    问题 目标 我希望基于QT5的GUI的背景是正在播放的视频文件。 我还希望能够以透明的方式设置GUI组件的样式,以便视频可以通过它们显示。 我不确定这是否有可能实现。 可能是因为我只是错过了一个重要的线索(毕竟我是Qt初学者),或者可能仅仅是因为它并不意味着要工作。 但是,作为一个乐观主义者,我已经尽力了。 第一次尝试 我最小的第一次尝试是这样的: int main( int argc, char **argv ){ QApplication app(argc, argv); QMediaPlayer *media=new QMediaPlayer(0); QVideoWidget *video=new QVideoWidget(0); //new QGLWidget() media->setVideoOutput(video); media->setMedia(QUrl::fromLocalFile("/tmp/avatar.mp4")); media->setPosition(3000000); media->play(); QPushButton *pb=new QPushButton(video); pb->setText(QString("BOB")); //pb->setStyleSheet(QString("background:transparent;"))
  • PyQt(Python+Qt)入门:Designer组件属性编辑界面中QWidget类相关属性详解
    本文适用人员:本文比较长,适合不理解Qt Designer部件属性的人员阅读或资料查找。 声明: 1、如果有人认为本文是简单的复制粘贴+翻译而成,敬请读本文最后的后记; 2、本文为老猿Python学习研究精心整理而成,禁止转载。 内容提纲 引言 概述 QWidget属性列表 Qt Designer组件属性归类 组件大小及位置控制的属性 界面响应事件控制属性 信息管理属性 外观控制属性 后记 一、引言 在Qt Designer中,提供了八大类可视化组件(也称为组件或控件,下同),分别为布局组件(Layouts)、分隔组件(Spacers)、按钮组件(Buttons)、表项视图(item views)、表项组件(item widgets)、容器(Containers)、输入组件(input widgets)、显示组件(Display widgets),在Qt Designer的应用界面设计时,可以将各种功能的组件拖拽到窗口上进行应用的可视化界面设计,而每种组件又可以指定不同的属性。 组件的属性设置在Qt Designer中的组件属性编辑部分进行设置的,如下图右边部分窗口: 可以看到,将相关属性栏目节点收敛后,最顶层的节点为组件对应的类及所有父类,并且从上往下排列的节点,基本上按照父类在上,子类在下的方式排列,很好的体现了类的继承关系以及相关属性是哪个类提供的
  • Python中tkinter和tkinter.ttk的小部件之间有什么区别?(What is the difference between the widgets of tkinter and tkinter.ttk in Python?)
    问题 主tkinter模块和子模块其ttk在Python 3看起来包含相同窗口小部件(即Buttons , CheckButtons等)。 因此,在创建按钮时,可以自由使用tkinter.Button小部件或tkinter.ttk.Button 。 你知道他们之间有什么区别吗? 为什么要选择一个? 回答1 tkinter中的小部件高度易配置。 您几乎可以完全控制它们的外观-边框宽度,字体,图像,颜色等。 ttk小部件使用样式来定义外观,因此,如果要使用非标准按钮,则需要花费更多的工作。 ttk小部件的文档也很少。 理解底层的主题和布局引擎(小部件本身中的布局,而不是pack , grid和place )是一个挑战。 一般而言,主题小部件将为您提供看起来更“本机”的应用程序,但以失去可配置性为代价。 我的建议是,如果您希望GUI看起来更现代,请使用ttk小部件,如果需要更多可配置性,请使用ttk小部件。 您可以在同一应用程序中使用它们。 回答2 您可能需要看一下转换现有应用程序以使用Tile小部件。 另请参阅: Tk Widget样式支持 如本文件所述: 最近,其他开源工具包,例如Qt(由KDE项目使用)和GTK(由GIMP图形编辑软件和Gnome项目使用)成为Motif的强大免费替代品,用于X-Window GUI开发。 诸如GNU /
  • 为什么Tk GUI被认为是丑陋的? [关闭](Why are Tk GUI's considered ugly? [closed])
    问题 关门了。 这个问题是基于意见的。 它当前不接受答案。 想要改善这个问题吗? 更新问题,以便可以通过编辑此帖子以事实和引用的形式回答。 11个月前关闭。 改善这个问题 Tk GUI似乎普遍被认为是丑陋的,但是我想知道具体为什么。 Tcl / Tk世界中的一些人会认为这是一个有争议的问题,因为现在对本机外观有了更好的支持,这是我决定使用Tcl / Tk的重要原因。 但是,现在的问题是,因为我利用了Tcl / Starkit vfs(虚拟文件系统),所以本机文件对话框不起作用,并且我将不得不恢复为纯Tk文件对话框。 请寻找特定的技术原因,例如关于字体别名(或缺少字体),字体样式或颜色等。 因为我个人不购买“这对我来说很丑”。 对我来说,这只是有所不同,所以我经常在Mac,Windows和Linux之间切换,所以我习惯了不同的外观/感觉。 具体来说,传统Tk GUI的主题外观看起来很丑陋: 回答1 我认为部分原因是Tk非常强大且易于使用,但是它并没有做很多手工操作。 因为它很容易,所以对UI设计缺乏经验的人可以在很短的时间内完成一些工作。 但是,由于没有很多经验,他们依赖默认值和最短解决方案(请阅读:不要在不需要滚动条时花时间隐藏滚动条,不要对工具栏使用常见的用法,不要正确对齐小部件等)。 不幸的是,Tk的默认设置并不总是最漂亮的。 如问题中的屏幕截图所示
  • Qt-从布局中删除所有小部件?(Qt - remove all widgets from layout?)
    问题 这似乎并不容易。 基本上,我通过函数将QPushButton添加到布局中,并且在函数执行时,我想先清除布局(删除所有QPushButton以及其中的所有其他内容),因为只是将更多按钮附加到了scrollview 。 标头 QVBoxLayout* _layout; cpp void MainWindow::removeButtonsThenAddMore(const QString &item) { //remove buttons/widgets QVBoxLayout* _layout = new QVBoxLayout(this); QPushButton button = new QPushButton(item); _layout->addWidget(button); QPushButton button = new QPushButton("button"); _layout->addWidget(button); QWidget* widget = new QWidget(); widget->setLayout(_layout); QScrollArea* scroll = new QScrollArea(); scroll->setWidget(widget); scroll->show(); } 回答1 我遇到了同样的问题:我有一个游戏应用程序
  • 【Qt】QWidget类详解(属性篇)
    00. 目录 文章目录 00. 目录01. 概述02. 顶层widget和子widget03. 复合型Widget04. 自定义控件和绘制方式05. Size Hints和Size Policies06. 事件(Events)07. 函数和属性组08. Widget样式表09. 透明和双缓冲10. 创建半透明窗口11. Native Widgets和 Alien Widgets12. 成员类型文档13. 属性文档13.1 acceptDrops: bool13.2 accessibleDescription : QString13.3 accessibleName : QString13.4 autoFillBackground : bool13.5 baseSize : QSize13.6 childrenRect : const QRect13.7 childrenRegion : const QRegion13.8 contextMenuPolicy : Qt::ContextMenuPolicy13.9 cursor : QCursor13.10 enabled : bool13.11 focus : const bool13.12 focusPolicy : Qt::FocusPolicy13.13 font : QFont13.14 frameGeometry
  • 第15.13节 PyQt(Python+Qt)入门学习:Qt Designer的Spacers部件详解
    一、 引言 在Designer的部件栏中,有两种类型的Spacers部件,下图中上面布局中为一个水平间隔部件(按钮1和按钮2之间的部件),下面布局中为一个垂直间隔部件(按钮3和4之间),如图: 这两种部件用于在布局中不同部件间增加间隔,以辅助解决一些布局无法完美解决的部件布局排列美观问题。 二、 Spacers部件的相关属性 2.1、概述 Spacers部件非常简单,除了名字之外只有三个属性,分别是orientation、sizeType和sizeHint。Spacers部件对应的类实际上是QSpacerItem类,但从QSpacerItem类来看,除了sizeHint属性能与Designer中的部件属性相同之外,并没有orientation、sizeType这两个属性。这是由于Spacers部件本身的特殊性导致的。 2.2、orientation和sizeType属性 从引言中的图可以看出,两种Spacers部件在Designer中的部件图形表现为两种线型,水平间隔部件(Horizontal Spacer)体现为一根比较粗的横线,垂直间隔部件(Vertical Spacer)体现为一根比较粗的竖线。 对这两种部件来说,横线对应部件在拉伸时的高度大小策略没有意义,竖线对应部件在拉伸时的宽度大小策略没有意义,因此Spacer部件的sizeType实际上就是sizePolicy
  • Qt Designer,在上下文菜单中缺少“转到插槽”?(Qt Designer, missing “go to slot” in context menu?)
    问题 我一直在 YouTube 上观看 Qt 教程系列,其中作者展示了如何在按下按钮时调用函数。 他右键单击 Qt Creator IDE 中的按钮并选择“Go to slot”,从那里他选择了将触发生成函数的信号。 由于我习惯于使用 Netbeans 进行开发,因此我只是尝试使用嵌入式 Qt Designer 来遵循他的示例。 不幸的是,当我右键单击我的按钮或任何小部件时,没有“转到插槽...”条目。 当然,我可以为我的主窗口创建一个新插槽,然后将按钮的信号连接到它,但是使用单个函数来完成它对我来说似乎更方便和干净。 有没有办法解决,或者如果没有,至少是一种完全通过代码处理的方法,而不必为每个服务于不同目的的按钮在主窗口中添加一个新插槽? 谢谢你的帮助。 回答1 虽然我不知道 Netbeans 中的 QtDesigner 为什么不提供此功能,但我知道该功能的作用:它只是在您的小部件类中创建一个具有特殊名称的插槽。 请注意,它没有添加连接语句。 它使用自动连接功能,其工作方式如下: 对于名称与此模式匹配的每个插槽: void on_X_Y(...) 它将连接到名为X的对象的名为Y的信号。 因此,如果您有一个名为button的 QPushButton ,并且您想处理pressed的信号,只需创建一个具有以下签名的插槽: void on_button_pressed()
  • QMainWindow上的Qt布局(Qt Layout on QMainWindow)
    问题 我与QtCreator's设计师一起设计了QMainWindow 。 它由默认的中央窗口小部件( QWidget )组成,其中包含一个QVBoxLayout以及所有其他窗口小部件。 现在我想要的就是QVBoxLayout自动占据整个中央小部件的矩形空间。 我怎样才能做到这一点? 我没有在中央小部件属性或QVBoxLayout's属性中找到任何可用的属性。 回答1 您不必手动创建QVBoxLayout 。 只需选择中央QWidget并按一个排版按钮即可。 回答2 如果要使用代码而不是QtCreator来执行此QtCreator ,则可以在QWidget设置布局,然后将QWidget设置为主窗口的中央窗口小部件,如下所示: #include <QtGui> #include <QWidget> #include <QHBoxLayout> #include "mainwindow.h" MainWindow::MainWindow() { // Set layout QHBoxLayout *layout = new QHBoxLayout; layout->addWidget(myWidget1); layout->addWidget(myWidget2); // Set layout in QWidget QWidget *window = new QWidget()
  • Nuki智能锁安全性分析
    Nuki智能锁安全性分析 lucywang 嘶吼专业版 Nuki智能锁,可以将手机变成智能钥匙。Nuki只要接入网络之后,在任何时间、任何地点都可以通过远程控制的方式打开大门。比如可以在家里没人的情况下,为快递员开门,让它将包裹放到家里之后再离开,还可以随时了解家人孩子回家的动态。同时还可以设置临时开锁密码,为客人提供临时访问权限。 由于Nuki智能锁是把设备中Nuki Lock通过桥接装置(Bridge)集成到智能模块中的,所以这款智能门锁主要是通过蓝牙和无接WIF进行远程操作的。为此在本文中,我们将把Nuki Lock (version 1) 和Bridge (version 4)分开进行介绍,深入研究这两个设备内部的功能。 Nuki Lock 在2018年11月,Nuki发布了他们的智能锁2.0版本。这款智能门锁支持蓝牙Bluetooth 5 LE,ZigBee协议(一种低速短距离传输的无线网上协议,底层是采用IEEE 802.15.4标准规范的媒体访问层与物理层)和智能门锁传感器。 智能锁2.0版本保留了之前版本的关键属性。随着新版本的发布,原来的锁已经可以被公开破解了,因为它已没有安全保密性可言了。 通过上图,我们可以很清晰地看到,要把那么多不同的模块集成到Nuki Lock是件多么难办的事情。我们把后面的螺母螺钉拆除,发现里面的按钮
  • 第15.12节PyQt(Python+Qt)入门学习:可视化设计界面组件布局详解
    一、引言 在Qt Designer中,在左边部件栏的提供了界面布局相关部件,如图: 可以看到共包含有四种布局部件,分别是垂直布局(Vertical Layout)、水平布局(Horizontal Layout)、网格布局(Grid Layout)、表单布局(Form Layout),实际上除了以上布局之外,还有两种布局,一种是没有布局的布局,称为绝对布局,一种是多种布局组合或嵌套使用,称为组合布局。 二、布局概述 在Designer设计的GUI界面中,如果使用绝对布局,则窗口中的部件在窗口拉伸或缩放时大小和位置都不会改变,这对于窗口要进行拉伸以及应用适应屏幕分辨率变化导致的被动窗口大小调整的情况,界面就不是设计者需要的展示效果,为此需要进行布局管理,确保窗体拉伸时整体界面保持正常显示。 Designer中提供了四种布局,分别是垂直布局(Vertical Layout)、水平布局(Horizontal Layout)、网格布局(Grid Layout)、表单布局(Form Layout),这四种布局分别对应PyQt中的四个类,分别是QVBoxLayout、QHBoxLayout、QGridLayout、QFormLayout。 这四个类都是从QLayout类或其子类QBoxLayout派生出来的,相关继承关系如下: 实际上作为布局的类,除了上面介绍的四个类之外
  • Qt学习笔记2
    Widges 讲解 小部件是使用Qt构建的图形用户界面(GUI)应用程序的基本构建块。每个GUI组件(例如按钮,标签,文本编辑器)都是一个小部件,位于用户界面窗口中的某个位置,或者显示为独立的窗口。每种类型的小部件都由QWidget的子类提供,而QWidget的子类本身就是QObject的子类。 QWidget不是抽象类。它可以用作其他窗口小部件的容器,并且可以使用最小的子类创建新的自定义窗口小部件。QWidget通常用于创建一个放置其他QWidget的窗口。 与QObject一样,可以使用父对象创建QWidget,以指示所有权,从而确保在不再使用对象时将其删除。对于窗口小部件,这些父子关系还具有其他含义:每个子窗口小部件都显示在其父窗口小部件占据的屏幕区域内。这意味着,当您删除窗口小部件时,它包含的所有子小部件也将被删除。 写一个main函数 Qt提供的许多GUI示例都遵循以下模式:具有main.cpp文件,该文件包含用于初始化应用程序的标准代码,以及包含应用程序逻辑和自定义GUI组件的任意数量的其他源/头文件。 main.cpp中的典型main()函数如下所示: #include <QtWidgets> // Include header files for application components. // ... int main(int argc, char *argv
  • QVBoxLayout中的小部件之间的空间(Space between widgets in QVBoxLayout)
    问题 我正在尝试使用Qt5.0.1制作登录表单。 我创建了2个小部件,然后将标签和行编辑放在其中一个中,将按钮放在另一个中。 然后,我将这两个小部件放在QVBoxLayout中,但是布局中两个小部件之间的空间超出了目的。 我尝试了setSpacing和setContentsMargin,但它们不适用于此程序。 vhandle->setSpacing(0); vhandle->setMargin(0); vhandle->setContentsMargins(0,0,0,0); vhandle->addWidget(handle,0, Qt::AlignTop); vhandle->addWidget(handle2,0, Qt::AlignTop); 但是两个小部件之间的空间没有变化: 我应该怎么办? 回答1 问题不是QVboxLayout的边距设置,而是容器小部件的布局的边距设置和QVBoxLayout的间距设置。 您已经将间距设置为0,这应该没问题。 此外,假设upperWidgetLayout是上小部件的布局和lowerWidgetLayout较低的部件,尝试布局 upperWidgetLayout->setContentsMargins(-1, -1, -1, 0); lowerWidgetLayout->setContentsMargin(-1, 0, -1, -1)
  • PyQt5中带有框架的自定义标题栏(Custom Titlebar with frame in PyQt5)
    问题 我正在为Windows / Linux开发开放源代码降价支持的最小笔记应用程序。 我正在尝试删除标题栏并添加我自己的按钮。 我想要一个标题栏,只有两个自定义按钮,如图所示 目前我有这个: 我试过修改窗口标志: 没有窗口标志时,窗口既可调整大小又可移动。 但是没有自定义按钮。 使用self.setWindowFlags(QtCore.Qt.FramelessWindowHint) ,窗口没有边框,但是无法移动或调整窗口大小使用self.setWindowFlags(QtCore.Qt.CustomizeWindowHint) ,窗口可以调整大小,但不能移动,也不能摆脱窗口顶部的白色部分。 任何帮助表示赞赏。 您可以在GitHub上找到该项目。 谢谢.. 这是我的python代码: from PyQt5 import QtCore, QtWidgets, QtWebEngineWidgets, uic import sys import os import markdown2 # https://github.com/trentm/python-markdown2 from PyQt5.QtCore import QRect from PyQt5.QtGui import QFont simpleUiForm = uic.loadUiType("Simple.ui")[0]
  • QT开发(六十四)——QT样式表(一)
    QT开发(六十四)——QT样式表 本文主要翻译自QT官方文档Qt Style Sheets 。一、QT样式表简介1、QT样式表简介 QSS的主要功能是使界面的表现与界面的元素分离,使得设计皮肤与界面控件分离的软件成为可能。QT样式表是允许用户定制widgets组件外观的强大机制,此外,子类化QStyle也可以定制widgets组件外观。QT样式表的概念、术语、语法很大程度上受到了CSS层叠样式表的影响。样式表是使用QApplication::setStyleSheet()设置在应用程序或是使用QWidget::setStyleSheet()设置在具体组件及其子对象的文字说明。例如,以下样式表指明QLineEdit使用×××作为背景色,QCheckBox使用红色作为文本颜色。 QLineEdit { background: yellow } QCheckBox { color: red } 对于这种定制,样式表比QPalette更强大。例如,要获取一个红色的按钮,可以设置QPushButton的QPalette::Button角色为红色。然而,这并不保证对所有的样式有效,因为样式的构造者会被不同平台的原则和本地的主题引擎所限制。 样式表可以实现那些很难或是不可能使用QPalette实现的所有定制。 如果想要某些强制字段为×××背景,按钮为红色文字,或是绚丽的复选框,样式表可以完成。2