RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题

问题[pyqt5]

Martin Hope
Владимир
Asked: 2023-07-08 04:07:41 +0000 UTC

如何在PyQt中无限循环中显示滑块值?

  • 5

此代码允许您显示滑块的值。但是,需要在代码中更改哪些内容才能无限循环地显示滑块的值呢?

主要.py

import sys

from PyQt6.QtWidgets import QApplication, QMainWindow
from PyQt6.uic import loadUi


class SliderValue(QMainWindow):
    def __init__(self):
        super(SliderValue, self).__init__()
        loadUi("slider_test.ui", self)

        self.ui_horizontalSlider.valueChanged.connect(self.updateValue)

    def updateValue(self, value):
        print(value)

    # Вывод в бесконечном цикле значения с ползунка
    # ?? def printValueInLoop(self):
    # ??     while(True):
    # ??         self.updateValue()



if __name__ == '__main__':
    app = QApplication(sys.argv)
    SV = SliderValue()
    SV.show()
    sys.exit(app.exec())

slider_test.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>800</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QSlider" name="ui_horizontalSlider">
    <property name="geometry">
     <rect>
      <x>330</x>
      <y>240</y>
      <width>160</width>
      <height>22</height>
     </rect>
    </property>
    <property name="orientation">
     <enum>Qt::Horizontal</enum>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>800</width>
     <height>26</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>
pyqt5
  • 1 个回答
  • 9 Views
Martin Hope
Djony Cooper
Asked: 2022-10-05 02:25:41 +0000 UTC

动态创建 QPushButton 并随后保存到 ini 文件

  • -1

动态创建按钮的问题。我正在写一个应用程序,我需要:

  1. 动态创建本质上是外部程序快捷方式的按钮。
  2. 如有必要,请移除所需按钮,以便其余按钮根据布局移动。
  3. 将配置保存到 ini 文件,以便在重新启动后保存所有创建的按钮。

现在是什么:

  1. 按钮是根据 Grid 布局动态创建的,可以运行附加到它们的 exe 文件,但只能运行最后附加的那个。
  2. 删除仅适用于最后创建的按钮,方法是用鼠标右键单击它。
  3. 事实证明,将按钮配置保存到 settings.ini 文件 - 但程序启动时我无法提取数据。

如果有人有任何想法,我将不胜感激。我附上了一个最小的工作示例。

main.py 文件:

from PyQt5.QtWidgets import QWidget, QApplication, QGridLayout, QGroupBox, QPushButton, QMessageBox, QMenu
from PyQt5.QtCore import QEvent, QSettings, Qt
from PyQt5.QtGui import QIcon

class Main(QWidget):

    settings = QSettings("settings.ini", QSettings.IniFormat)

    def __init__(self):
        super(Main, self).__init__()
        self.setWindowTitle('Образец')
        self.resize(500, 300)

        grid = QGridLayout()
        grid.addWidget(self.prog_group_box(), 0, 0, 1, 1)
        grid.addWidget(self.b_new_prog(), 1, 0, Qt.AlignRight)

        self.setLayout(grid)

    def prog_group_box(self):
        groupBox1 = QGroupBox(self)
        self.grid_prog = QGridLayout()
        groupBox1.setLayout(self.grid_prog)

        return groupBox1

    def saved_conf(self):
        # Сохранение созданной кнопки в ini файл
        self.settings.setValue('button', self.new_but)
        self.settings.setValue('label', self.click_newprog._leProgLabel.text())
        self.settings.setValue('source', self.click_newprog._leReview.text())
        self.settings.sync()

    # def restore_settings(self):
    # Функция восстановления сохраненного конфига из ini файла
        # test = self.settings.setValue('button')

        # print(f'RESTORE: {test}')

    def delete_setting(self):
        # Функция удаления данных из ini файла с сохраненной конфигурацией
        self.settings = QSettings("settings.ini", QSettings.IniFormat)
        self.settings.remove('button')

    def b_new_prog(self):
        self.b_new_prog = QPushButton(self)
        self.b_new_prog.setText("Добавить")
        self.b_new_prog.setMinimumSize(129, 43)
        self.b_new_prog.clicked.connect(self.click_newprog)

        return self.b_new_prog

    def click_newprog(self):
        from second import Second
        self.click_newprog = Second(self)
        self.click_newprog.show()

    def create_new_button(self):
        self.new_but = QPushButton()
        self.new_but.setFixedSize(70, 70)
        self.new_but.clicked.connect(self.btnClicked)
        self.new_but.setText(self.click_newprog._leProgLabel.text())
        self.grid_prog.addWidget(self.new_but, 0, 0)
        i = self.grid_prog.count() - 1
        self.grid_prog.addWidget(self.new_but, 1 + i // 8, i % 8)
        self.new_but.installEventFilter(self)

    def btnClicked(self):
        import os
        os.startfile(self.click_newprog._leReview.text())

    # Контекстное меню
    def eventFilter(self, source, event):
        if event.type() == QEvent.ContextMenu and source is self.new_but:
            menu = QMenu()
            menu.addAction('Удалить')

            if menu.exec_(event.globalPos()):
                reply = QMessageBox.question(
                    self,
                    'Message', "Вы действительно хотите удалить?",
                    QMessageBox.Yes | QMessageBox.No,
                    QMessageBox.No
                    )
                if reply == QMessageBox.Yes:
                    self.new_but.hide()
                    self.delete_setting()
                else:
                    pass

        return super().eventFilter(source, event)

if __name__ == ('__main__'):
    import sys
    app = QApplication(sys.argv)
    w = Main()
    w.show()
    sys.exit(app.exec_())

第二个.py 文件:

from PyQt5.QtWidgets import (QLabel, QVBoxLayout, QLineEdit, QPushButton,
                             QHBoxLayout, QFileDialog, QMessageBox, QDialog)
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont


class Second(QDialog):
    def __init__(self, Main):
        super().__init__()
        self.main = Main
        self.setMinimumSize(300, 160)
        self.setWindowFlags(Qt.Dialog)

        vbox = QVBoxLayout()
        hbox = QHBoxLayout()
        hbox.addWidget(self._lProgLabel())
        hbox.addWidget(self._leProgLabel())
        vbox.addLayout(hbox)
        vbox.addWidget(self._lReview())
        hbox2 = QHBoxLayout()
        hbox2.addWidget(self._leReview())
        hbox2.addWidget(self._bReview())
        vbox.addLayout(hbox2)
        hbox3 = QHBoxLayout()
        hbox3.addWidget(self.b_create())
        hbox3.addWidget(self.b_close())
        vbox.addLayout(hbox3)
        self.setLayout(vbox)

    def _lProgLabel(self):
        _lProgLabel = QLabel(self)
        _lProgLabel.setText('<center style=font-size:10pt><FONT FACE="Century Gothic">Название кнопки:</center>')

        return _lProgLabel

    def _leProgLabel(self):
        self._leProgLabel = QLineEdit(self)
        self._leProgLabel.setFont(QFont('Century Gothic', 10))

        return self._leProgLabel

    def _lReview(self):
        _lreview = QLabel(self)
        _lreview.setText(
            '<center style=font-size:10pt><FONT FACE="Century Gothic">Укажите путь к программе или нажмите "Обзор":</center>')

        return _lreview

    def _leReview(self):
        self._leReview = QLineEdit(self)
        self._leReview.setFixedSize(250, 30)
        self._leReview.setFont(QFont('Century Gothic', 10))

        return self._leReview

    def _bReview(self):
        _breview = QPushButton()
        _breview.setFixedSize(90, 30)
        _breview.setText("Обзор")
        _breview.clicked.connect(self.browseFiles)

        return _breview

    def browseFiles(self):
        fname = QFileDialog.getOpenFileName(self, 'Open file', 'C:\Program Files', 'exe files (*.exe)')
        self._leReview.setText(fname[0])

    def b_create(self):

        b_create = QPushButton(self)
        b_create.setText("Добавить")
        b_create.setMinimumSize(10, 40)

        b_create.clicked.connect(self.create_button)

        return b_create

    def b_close(self):
        b_close = QPushButton(self)
        b_close.setText("Отмена")
        b_close.setMinimumSize(10, 40)
        b_close.clicked.connect(self._cancel)

        return b_close

    def _cancel(self):
        self.close()

    def showMessageBox(self, title, message):
        msgBox = QMessageBox()
        msgBox.setWindowTitle(title)
        msgBox.setText(message)
        msgBox.setStyleSheet("font: 12px;"
                             "font-family: Century Gothic;")
        msgBox.setStandardButtons(QMessageBox.Ok)
        msgBox.exec_()

    # Проверка ввода данных
    def create_button(self):
        if len(self._leReview.text()) == 0:
            self.showMessageBox('Внимание!',
                                '<center><br/><u style=font-size:10pt><FONT FACE="Arial"><b>Вы не заполнили поля</b></u></center></FONT>')
        else:
            self.main.create_new_button()
            self.main.saved_conf()
            self.close()


if __name__ == ('__main__'):
    w = Second()
    w.show()
pyqt5
  • 2 个回答
  • 21 Views
Martin Hope
MRX
Asked: 2022-08-31 19:35:08 +0000 UTC

删除 LeftToRight QListWidget 中的左填充

  • 1

我需要删除屏幕上用红线(左侧)指示的缩进。

如何实施?

我尝试使用setSpacing,但没有用。

此外,如果可以的话,很高兴知道如何删除小部件周围的白色选择框。(截图 2)

截图 1 我想要的是 截图2

选择

利润中心:

import sys

from PySide6 import QtWidgets, QtGui
from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
    QMetaObject, QObject, QPoint, QRect,
    QSize, QTime, QUrl, Qt)
from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
    QFont, QFontDatabase, QGradient, QIcon,
    QImage, QKeySequence, QLinearGradient, QPainter,
    QPalette, QPixmap, QRadialGradient, QTransform)
from PySide6.QtWidgets import (QApplication, QLabel, QLayout, QSizePolicy,
                               QSpacerItem, QVBoxLayout, QWidget, QMainWindow, QListView, QAbstractItemView,
                               QListWidget, QFrame, QGridLayout)

class Ui_Form(object):
    def setupUi(self, Form):
        if not Form.objectName():
            Form.setObjectName(u"Form")
        Form.resize(179, 305)
        Form.setMinimumSize(QSize(179, 0))
        Form.setCursor(QCursor(Qt.PointingHandCursor))
        Form.setStyleSheet(u"background-color: rgb(37, 41, 49)")
        self.verticalLayout = QVBoxLayout(Form)
        self.verticalLayout.setSpacing(2)
        self.verticalLayout.setObjectName(u"verticalLayout")
        self.verticalLayout.setSizeConstraint(QLayout.SetFixedSize)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.imagelabel = QLabel(Form)
        self.imagelabel.setObjectName(u"imagelabel")
        self.imagelabel.setMinimumSize(QSize(179, 256))
        self.imagelabel.setMaximumSize(QSize(179, 256))

        self.verticalLayout.addWidget(self.imagelabel)

        self.nameru = QLabel(Form)
        self.nameru.setObjectName(u"nameru")
        self.nameru.setMaximumSize(QSize(16777215, 50))
        font = QFont()
        font.setFamilies([u"Segoe UI Black"])
        font.setPointSize(10)
        self.nameru.setFont(font)
        self.nameru.setStyleSheet(u"color: rgb(241, 241, 241);\n"
"font-size: 10pt;\n"
"font-family: Segoe UI Black\n"
"")
        self.nameru.setAlignment(Qt.AlignCenter)
        self.nameru.setWordWrap(True)

        self.verticalLayout.addWidget(self.nameru)

        self.nameen = QLabel(Form)
        self.nameen.setObjectName(u"nameen")
        self.nameen.setMaximumSize(QSize(16777215, 30))
        font1 = QFont()
        font1.setFamilies([u"Segoe UI"])
        font1.setPointSize(8)
        self.nameen.setFont(font1)
        self.nameen.setStyleSheet(u"color: #626a76;\n"
"font-size: 8pt;\n"
"font-family: Segoe UI\n"
"")
        self.nameen.setAlignment(Qt.AlignCenter)
        self.nameen.setWordWrap(True)

        self.verticalLayout.addWidget(self.nameen)

        self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)

        self.verticalLayout.addItem(self.verticalSpacer)


        self.retranslateUi(Form)

        QMetaObject.connectSlotsByName(Form)
    # setupUi
    def retranslateUi(self, Form):
        Form.setWindowTitle(QCoreApplication.translate("Form", u"Form", None))
        self.imagelabel.setText("")
        self.nameru.setText(QCoreApplication.translate("Form", u"TEST", None))
        self.nameen.setText(QCoreApplication.translate("Form", u"TEST:\n"
"Beiketushen", None))

class LinkedWidget(QtWidgets.QWidget, Ui_Form):
    def __init__(self, parent=None):
        super(LinkedWidget, self).__init__(parent)
        self.setupUi(self)
        self.imagedata = None


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        if not MainWindow.objectName():
            MainWindow.setObjectName(u"MainWindow")
        MainWindow.resize(864, 346)
        MainWindow.setStyleSheet(u"background-color: rgb(37, 41, 49)")
        self.centralwidget = QWidget(MainWindow)
        self.centralwidget.setObjectName(u"centralwidget")
        self.gridLayout = QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName(u"gridLayout")
        self.linkedframe = QFrame(self.centralwidget)
        self.linkedframe.setObjectName(u"linkedframe")
        self.linkedframe.setMinimumSize(QSize(0, 50))
        self.linkedframe.setFrameShape(QFrame.StyledPanel)
        self.linkedframe.setFrameShadow(QFrame.Raised)
        self.verticalLayout_23 = QVBoxLayout(self.linkedframe)
        self.verticalLayout_23.setSpacing(0)
        self.verticalLayout_23.setObjectName(u"verticalLayout_23")
        self.verticalLayout_23.setContentsMargins(0, 0, 0, 0)
        self.linkedlabel = QLabel(self.linkedframe)
        self.linkedlabel.setObjectName(u"linkedlabel")
        self.linkedlabel.setMinimumSize(QSize(0, 30))
        self.linkedlabel.setMaximumSize(QSize(16777215, 30))
        self.linkedlabel.setStyleSheet(u"color: rgb(241, 241, 241);\n"
"font-size: 14pt;\n"
"font-family: Segoe UI Black\n"
"")

        self.verticalLayout_23.addWidget(self.linkedlabel)

        self.linkedlistwidget = QListWidget(self.linkedframe)
        self.linkedlistwidget.setObjectName(u"linkedlistwidget")
        self.linkedlistwidget.setMinimumSize(QSize(0, 168))
        self.linkedlistwidget.setLayoutDirection(Qt.LeftToRight)
        self.linkedlistwidget.setAutoFillBackground(True)
        self.linkedlistwidget.setStyleSheet(u"QListWidget{\n"
"    padding: 5px;\n"
"}\n"
"QListWidget::item{\n"
"    margin: 5px;\n"
"    background-color: transparent; \n"
"    border: 0px;\n"
"    padding-left: 1px;\n"
"}\n"
"QListWidget::item:selected{\n"
"background-color: transparent;\n"
"}\n"
"QListWidget::item:hover{\n"
"    background-color: transparent; \n"
"}")
        self.linkedlistwidget.setFrameShape(QFrame.Panel)
        self.linkedlistwidget.setDragEnabled(False)
        self.linkedlistwidget.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel)
        self.linkedlistwidget.setHorizontalScrollMode(QAbstractItemView.ScrollPerPixel)
        self.linkedlistwidget.setMovement(QListView.Static)
        self.linkedlistwidget.setFlow(QListView.LeftToRight)
        self.linkedlistwidget.setProperty("isWrapping", True)
        self.linkedlistwidget.setResizeMode(QListView.Fixed)
        self.linkedlistwidget.setLayoutMode(QListView.SinglePass)
        self.linkedlistwidget.setSpacing(0)
        self.linkedlistwidget.setViewMode(QListView.ListMode)
        self.linkedlistwidget.setWordWrap(True)
        self.linkedlistwidget.setSelectionRectVisible(False)

        self.verticalLayout_23.addWidget(self.linkedlistwidget)


        self.gridLayout.addWidget(self.linkedframe, 0, 0, 1, 1)

        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)

        QMetaObject.connectSlotsByName(MainWindow)
    # setupUi

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None))
        self.linkedlabel.setText(QCoreApplication.translate("MainWindow", u"\u0421\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0435", None))
    # retranslateUi

class MainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
        self.linkedlistwidget.setSpacing(0)
        for i in range(0, 5):
            linkedwidget = LinkedWidget()
            linkedwidget.nameru.setText("TEST")
            linkedwidget.nameen.setText("TEST")
            movie = QtGui.QMovie("loading.gif") # можете заменить другой гифкой или чем либо ещё
            size = QSize(179, 256)
            movie.setScaledSize(size)
            linkedwidget.imagelabel.setMovie(movie)
            movie.start()
            item = QtWidgets.QListWidgetItem(self.linkedlistwidget)
            item.setSizeHint(linkedwidget.sizeHint())
            self.linkedlistwidget.addItem(item)
            self.linkedlistwidget.setItemWidget(item, linkedwidget)
            self.linkedlistwidget.setMinimumSize(QSize(0, item.sizeHint().height()))

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())
pyqt5
  • 1 个回答
  • 37 Views
Martin Hope
anonimus
Asked: 2022-08-20 15:51:44 +0000 UTC

按下按钮PyQt5时如何连续执行操作?

  • 1

我在PyQt5中有代码。我希望当我延迟按钮时,动作会不断执行。我尝试使用pressed.connect而不是clicked.connect,但没有任何改变。

主.py:

from PyQt5.QtWidgets import *
from threading import Thread
from time import sleep
import socket
import plyer

app = QApplication([])
main = QWidget()

def get_pos():
    while True:
        client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        client.connect(("192.168.1.34",1234))
        client.send(str("plyer.accelerometer.acceleration").encode("utf-8"))
        sleep(0.5)
th = Thread(target=get_pos, args=())
th.start()

gas = QPushButton('Gas')
stop = QPushButton('Stop')
cords = QLabel('X = ?, Y = ?, Z = ?')

gas.setMinimumSize(300,300)
stop.setMinimumSize(300,300)

def press_gas():
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(("192.168.1.34",1234))
    client.send(str("GAS").encode("utf-8"))

def press_stop():
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client.connect(("192.168.1.34",1234))
    client.send(str("STOP").encode("utf-8"))

rowh = QHBoxLayout()
row = QVBoxLayout()
row1 = QVBoxLayout()

row.addWidget(gas)
row.addWidget(stop)
row1.addWidget(cords)

rowh.addLayout(row)
rowh.addLayout(row1)

gas.pressed.connect(press_gas)
stop.pressed.connect(press_stop)

main.setLayout(rowh)
main.show()
app.exec_()
python pyqt5
  • 1 个回答
  • 26 Views
Martin Hope
chernyahovsky2010
Asked: 2022-08-19 20:28:51 +0000 UTC

在 Qt Designer 中设置 QCheckBox 样式时,复选框消失

  • 1

我正在尝试风格QCheckBox。但与此同时,QCheckBox勾号消失了。

如何退货,但同时为QCheckBox.

QCheckBox::indicator {
    width: 20px;
    height: 20px;
    background-color:qlineargradient(spread:pad, x1:0, y1:0.5, x2:1, y2:0.5, stop:0 rgba(48, 48, 48, 230));
    border-radius: 10px;
    border-style: solid;
    border-width: 1px;
    border-color: black;
}

QCheckBox{ 
    font:18px;
    color:white;
}



pyqt5 qt5
  • 1 个回答
  • 21 Views

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5