RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

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

全部问题

Martin Hope
dynamic.aerospace.inc
Asked: 2025-01-29 02:19:50 +0000 UTC

如何让 QToolButton 消失?

  • 6

我有一个用Qt Designer制作的表单。我希望当您单击lineEdit或 时textEdit,它们会出现toolButton,
但直到用户单击它们时,它们才可见。

如何做到这一点?


main.py:

from PyQt6 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 480)
        MainWindow.setStyleSheet("QLineEdit{\n"
"    min-width: 100px;\n"
"    min-height: 35px;\n"
"    background-color: white;\n"
"    border: 1px solid gray;\n"
"    border-radius: 10px;\n"
"    \n"
"    font: 14pt \"Segoe UI Variable\";\n"
"}\n"
"\n"
"QTextEdit{\n"
"    max-width: 800px;\n"
"    max-height: 100px;\n"
"    background-color: white;\n"
"    border: 1px solid gray;\n"
"    border-radius: 10px;\n"
"\n"
"    \n"
"    font: 12pt \"Segoe UI Variable\";\n"
"}\n"
"\n"
"QToolButton{\n"
"    background-color: white;\n"
"    border: 1px solid gray;\n"
"    border-radius: 10px;\n"
"}\n"
"\n"
"QGroupBox{\n"
"    background-color: white;\n"
"    border: 1px solid gray;\n"
"    border-radius: 10px;\n"
"}")
        self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.groupBox = QtWidgets.QGroupBox(parent=self.centralwidget)
        self.groupBox.setTitle("")
        self.groupBox.setObjectName("groupBox")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.lineEdit = QtWidgets.QLineEdit(parent=self.groupBox)
        self.lineEdit.setObjectName("lineEdit")
        self.gridLayout_2.addWidget(self.lineEdit, 0, 0, 1, 1)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.toolButton_2 = QtWidgets.QToolButton(parent=self.groupBox)
        self.toolButton_2.setMinimumSize(QtCore.QSize(30, 0))
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("../../icon/format_bold_30dp_999999_FILL0_wght400_GRAD0_opsz24.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton_2.setIcon(icon)
        self.toolButton_2.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_2.setObjectName("toolButton_2")
        self.horizontalLayout.addWidget(self.toolButton_2)
        self.toolButton_4 = QtWidgets.QToolButton(parent=self.groupBox)
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap("../../icon/format_italic_30dp_999999_FILL0_wght400_GRAD0_opsz24.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton_4.setIcon(icon1)
        self.toolButton_4.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_4.setObjectName("toolButton_4")
        self.horizontalLayout.addWidget(self.toolButton_4)
        self.toolButton_3 = QtWidgets.QToolButton(parent=self.groupBox)
        icon2 = QtGui.QIcon()
        icon2.addPixmap(QtGui.QPixmap("../../icon/format_underlined_30dp_999999_FILL0_wght400_GRAD0_opsz24.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton_3.setIcon(icon2)
        self.toolButton_3.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_3.setObjectName("toolButton_3")
        self.horizontalLayout.addWidget(self.toolButton_3)
        self.toolButton_5 = QtWidgets.QToolButton(parent=self.groupBox)
        icon3 = QtGui.QIcon()
        icon3.addPixmap(QtGui.QPixmap("../../icon/link_30dp_999999_FILL0_wght400_GRAD0_opsz24.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton_5.setIcon(icon3)
        self.toolButton_5.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_5.setObjectName("toolButton_5")
        self.horizontalLayout.addWidget(self.toolButton_5)
        self.toolButton = QtWidgets.QToolButton(parent=self.groupBox)
        icon4 = QtGui.QIcon()
        icon4.addPixmap(QtGui.QPixmap("../../icon/format_clear_30dp_999999_FILL0_wght400_GRAD0_opsz24.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton.setIcon(icon4)
        self.toolButton.setIconSize(QtCore.QSize(30, 30))
        self.toolButton.setObjectName("toolButton")
        self.horizontalLayout.addWidget(self.toolButton)
        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout.addItem(spacerItem)
        self.gridLayout_2.addLayout(self.horizontalLayout, 1, 0, 1, 1)
        self.textEdit = QtWidgets.QTextEdit(parent=self.groupBox)
        self.textEdit.setObjectName("textEdit")
        self.gridLayout_2.addWidget(self.textEdit, 2, 0, 1, 1)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.toolButton_12 = QtWidgets.QToolButton(parent=self.groupBox)
        self.toolButton_12.setIcon(icon)
        self.toolButton_12.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_12.setObjectName("toolButton_12")
        self.horizontalLayout_2.addWidget(self.toolButton_12)
        self.toolButton_11 = QtWidgets.QToolButton(parent=self.groupBox)
        self.toolButton_11.setIcon(icon1)
        self.toolButton_11.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_11.setObjectName("toolButton_11")
        self.horizontalLayout_2.addWidget(self.toolButton_11)
        self.toolButton_10 = QtWidgets.QToolButton(parent=self.groupBox)
        self.toolButton_10.setIcon(icon2)
        self.toolButton_10.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_10.setObjectName("toolButton_10")
        self.horizontalLayout_2.addWidget(self.toolButton_10)
        self.toolButton_9 = QtWidgets.QToolButton(parent=self.groupBox)
        self.toolButton_9.setIcon(icon3)
        self.toolButton_9.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_9.setObjectName("toolButton_9")
        self.horizontalLayout_2.addWidget(self.toolButton_9)
        self.toolButton_8 = QtWidgets.QToolButton(parent=self.groupBox)
        icon5 = QtGui.QIcon()
        icon5.addPixmap(QtGui.QPixmap("../../icon/format_list_numbered_30dp_999999_FILL0_wght400_GRAD0_opsz24.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton_8.setIcon(icon5)
        self.toolButton_8.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_8.setObjectName("toolButton_8")
        self.horizontalLayout_2.addWidget(self.toolButton_8)
        self.toolButton_7 = QtWidgets.QToolButton(parent=self.groupBox)
        icon6 = QtGui.QIcon()
        icon6.addPixmap(QtGui.QPixmap("../../icon/format_list_bulleted_30dp_999999_FILL0_wght400_GRAD0_opsz24.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
        self.toolButton_7.setIcon(icon6)
        self.toolButton_7.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_7.setObjectName("toolButton_7")
        self.horizontalLayout_2.addWidget(self.toolButton_7)
        self.toolButton_6 = QtWidgets.QToolButton(parent=self.groupBox)
        self.toolButton_6.setIcon(icon4)
        self.toolButton_6.setIconSize(QtCore.QSize(30, 30))
        self.toolButton_6.setObjectName("toolButton_6")
        self.horizontalLayout_2.addWidget(self.toolButton_6)
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
        self.horizontalLayout_2.addItem(spacerItem1)
        self.gridLayout_2.addLayout(self.horizontalLayout_2, 3, 0, 1, 1)
        self.gridLayout.addWidget(self.groupBox, 0, 0, 1, 1)
        spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
        self.gridLayout.addItem(spacerItem2, 1, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.lineEdit.setPlaceholderText(_translate("MainWindow", "Новая форма"))
        self.toolButton_2.setText(_translate("MainWindow", "..."))
        self.toolButton_4.setText(_translate("MainWindow", "..."))
        self.toolButton_3.setText(_translate("MainWindow", "..."))
        self.toolButton_5.setText(_translate("MainWindow", "..."))
        self.toolButton.setText(_translate("MainWindow", "..."))
        self.textEdit.setPlaceholderText(_translate("MainWindow", "Описание"))
        self.toolButton_12.setText(_translate("MainWindow", "..."))
        self.toolButton_11.setText(_translate("MainWindow", "..."))
        self.toolButton_10.setText(_translate("MainWindow", "..."))
        self.toolButton_9.setText(_translate("MainWindow", "..."))
        self.toolButton_8.setText(_translate("MainWindow", "..."))
        self.toolButton_7.setText(_translate("MainWindow", "..."))
        self.toolButton_6.setText(_translate("MainWindow", "..."))
python
  • 1 个回答
  • 46 Views
Martin Hope
pythonniy_chainik
Asked: 2025-01-28 23:35:18 +0000 UTC

需要对用罗马数字系统表示十进制数的问题的解决方案进行代码审查

  • 6

问题:
七个不同的符号代表罗马数字,其含义如下:

罗马数字 十进制数
我 1
五 5
十 10
大号 50
碳 100
德 500
米 1000

罗马数字是由十进制数值从最高位到最低位相加转换而成的。小数位数值转换为罗马数字有以下规则:

如果值不是以 4 或 9 开头,请选择可以从输入中减去的最大值的符号,将该符号添加到结果中,减去其值,然后将余数转换为罗马数字。

如果值以 4 或 9 开头,则使用减法形式,表示从下一个符号中减去一个符号,例如 4 减 1(I)小于 5(V):IV,9 减 1(I)小于 10(X):IX。仅使用以下减法形式:4 (IV)、9 (IX)、40 (XL)、90 (XC)、400 (CD) 和 900 (CM)。

只有 10 的幂(I、X、C、M)可以连续添加不超过 3 次,以表示 10 的倍数。不能多次添加 5 (V)、50 (L) 或 500 (D)。如果需要将某个符号加 4 次,请使用减法形式。

给定一个整数,将其转换为罗马数字。

示例 1:

Ввод: число = 3749

Вывод: "MMMDCCXLIX"

Объяснение:

3000 = МММ как 1000 (М) + 1000 (М) + 1000 (М)
 700 = DCC как 500 (D) + 100 (C) + 100 (C)
  40 = XL как 10 (X) меньше 50 (L)
   9 = IX как 1 (I) меньше 10 (X)
Примечание: 49 не на 1 (I) меньше 50 (L), поскольку преобразование основано на десятичных знаках.

示例 2:

Ввод: число = 58

Вывод: "LVIII"

Объяснение:

50 = L, 8 = VIII

示例 3:

Ввод: число = 1994

Вывод: "MCMXCIV"

Объяснение:

1000 = М
 900 = СМ
  90 = ХС
   4 = IV

限制:

1 <= num <= 3999

链接:
https://leetcode.com/problems/integer-to-roman/description/

我最近为这个任务写了一些代码。关键特性是我决定不向表中不存在的元组添加值(None 除外)。结果如下:

def int_to_roman(num):
    result = []
    nums = (1000, 500, 100, 50, 10, 5, 1, None)
    roman_nums = ('M', 'D', 'C', 'L', 'X', 'V', 'I')

    while not num == 0:
        for max_deductible in nums:
            # Находим такое наибольшее вычитаемое, которое будет меньше либо равно num
            if max_deductible <= num:
                # Сохраняем индекс вычитаемого
                max_deductible_index = nums.index(max_deductible)
                break

        # Сохраняем предыдущее число (до max_deductible)
        previous_num = nums[max_deductible_index - 1]
        flag = len(str(max_deductible)) == len(str(previous_num))

        # Выбор вычитаемого из next_num, которое подходит для данного случая
        possibly_deductible = (nums[max_deductible_index + 1], max_deductible)[flag]

        # Если существует число менее num и более max_deductible (в nums)
        if all((possibly_deductible, previous_num)) and previous_num - possibly_deductible <= num:
            num -= (previous_num - possibly_deductible)
            possibly_deductible_index = nums.index(possibly_deductible)

            # В римском вычитании сначала ставится вычитаемое, а потом уменьшаемое
            result.append(roman_nums[possibly_deductible_index] +
                          roman_nums[max_deductible_index - 1])
        else: # Если такого числа не существует, вычитаем max_deductible
            num -= max_deductible
            result.append(roman_nums[max_deductible_index])

    return ''.join(result) # Возращаем результат

我很乐意听到任何批评。但重要的是要明白,我最近才进入这个领域,因此我不应该建议任何来自库/框架的功能或方法。

python
  • 1 个回答
  • 147 Views
Martin Hope
Alexandr_TT
Asked: 2025-01-28 22:41:54 +0000 UTC

如何使 SVG 和 CSS 动画正确协同工作?

  • 8

尝试弄清楚 CSS 和 SVG 动画如何交互。为此,我采用了最简单的场景:

  1. 角色从右向左移动,同时上下移动(svg)
  2. 旋转 180 度 (css) 并
  3. 向后移动至左右 (css)

以下是代码:

body { perspective: 1000px;}

  .container{
  width:80vw;
  height:80vh;
}  
#SnowMaiden {
transform-box:fill-box;
transform-origin: center center;
animation: Maiden_rotate 2s linear 8s  forwards, Maiden_translate 14s linear 16s forwards;
}
@keyframes Maiden_rotate {
0%{ transform:  rotate3d(0,1,0,20deg);}
50%{ transform:  rotate3d(0,1,0,80deg);}
100%{ transform:  rotate3d(0,1,0,180deg);}
}
@keyframes Maiden_translate {
0%{ transform:  translate3d(300px,10px,10px);}
50%{ transform:  translate3d(800px,10px,10px);}
100%{ transform:  translate3d(1400px,10px,10px);}
}
<svg id="svg1" version="1.1" xmlns="http://www.w3.org/2000/svg" 
        xmlns:xlink="http://www.w3.org/1999/xlink"
            viewBox="0 0 1680 1050" preserveAspectRatio="xMinYMin meet" > 

       <!-- Фон с ёлочкой -->
    <image id="img1" xlink:href="https://isstatic.askoverflow.dev/PBRad.jpg" width="100%" height="100%" opacity="1"   />  
    
    <image  id="SnowMaiden" x="1400" y="650"  xlink:href="https://isstatic.askoverflow.dev/LU3Bvfdr.png" opacity="0">
                  <!-- Анимация появления девочки с корзинкой -->
   <animate id="op1_Maidan" attributeName="opacity"   values="0; 1" dur="2s" begin="svg1.click"  repeatCount="1" fill="freeze" restart="whenNotActive" />   
                            <!-- Перемещение  по горизонтали -->
  <animate id="Go_Maidan" attributeName="x"   values="1400;1300;1200;1100;1000;900;800;700;600;500;400;300" dur="5s" begin="op1_Maidan.end"  repeatCount="indefinity" fill="freeze"  restart="whenNotActive"  />   
                         <!-- Перемещение по вертикали -->    
   <animate id="Go_Maidan_y" attributeName="y"   values="650;670;650;630;650;670;650;630;650;670;650;630" dur="5s" begin="op1_Maidan.end"  repeatCount="indefinity" fill="freeze"   restart="whenNotActive"  />  
</image>  
</svg>

从代码片段的结果可以看出:
180 度旋转之前的 SVG 动画阶段一切正常。故障在转弯后开始。看起来 CSS 动画与之前的 SVG 动画冲突,这就是 CSS 运动结果不可见的原因。
当然,您可以纯粹用 SVG 或仅使用 CSS 来实现动画。
我有一个问题,如何让 SVG 和 CSS 动画正确协同工作?

html
  • 2 个回答
  • 91 Views
Martin Hope
Garp
Asked: 2025-01-28 17:15:44 +0000 UTC

python 终止进程

  • 5

有一个项目。该项目有一个文件夹tests,其中存放各个测试文件,并run_tests使用以下函数运行所有测试文件main:

def run_script(script):
    subprocess.Popen(["python3", "-Wignore", "-m", script])

def main():
    for file in os.listdir('tests'):
        run_script('tests.{}'.format(file.split('.')[0]))

if __name__ == "__main__":
    main()

使用命令从终端启动python -m tests.run_tests。所有文件均正常工作,但该过程未在终端中完成。

结果是这样的: 在此处输入图片描述

它应该是这样的(这是手动按下之后ctrl + c): 在此处输入图片描述

我在代码中添加了sys.exit()、、、sys.exit(0)(最后两个是糟糕的选项)——但这没有帮助exit()。quit()该怎么办?

更新

已添加print(script)到run_script前面subprocess...。结果是这样的: 在此处输入图片描述

python
  • 1 个回答
  • 55 Views
Martin Hope
Alexey Trukhanov
Asked: 2025-01-28 16:33:23 +0000 UTC

等待发电机运转的最佳方法是什么?

  • 6

这个问题由此而生。简而言之,我使用postgresql NOTIFY / LISTEN命令来组织两个进程之间的消息。作为python和postgersql之间的接口,我使用psycopg提供以下等待通知解决方案的模块:

import psycopg
conn = psycopg.connect("", autocommit=True)
conn.execute("LISTEN mychan")
gen = conn.notifies()
for notify in gen:
    print(notify)
    if notify.payload == "stop":
        gen.close()
print("there, I stopped")

在这里,我们创建一个生成器,当通知到达时它会“打开”,并等待它在循环中触发。循环阻塞流程,如果您不以gen.close()某种条件的形式提供退出,则循环将无限期等待。

我的任务略有不同。我不需要等待所有的消息,而只需要等待第一条消息,至于哪一条消息都无所谓。一旦第一条消息到达,阻塞等待过程就应该继续。该方法conn.notifies()(其中conn是一个包含与数据库的连接的psycopg对象)有一个参数,该参数在收到n 条stop_after=n消息后停止等待消息。根据我的任务,我指定并期待一条消息。stop_after=1

问题。如何以最节省内存/时间/语法的方式等待该生成器启动。我有两个解决方案。第一个解决方案,正如开发人员所建议的,是通过循环。

gen = conn.notifies(stop_after=1)
for _ in gen:
    pass

由于我们不关心收到什么消息,我使用了一个未命名的变量,并且在循环中不执行任何操作。

第二种选择是创建一个列表:

gen = conn.notifies(stop_after=1)
_ = list(gen)

# или даже вот так
_ = [1 for _ in gen]

#можно даже вот так, вообще никуда не присваивать
[1 for _ in gen]

如何提高预判能力?

python
  • 1 个回答
  • 47 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