PyQty5 - 5단원: GUI 애플릿 버튼 기능 구현(완전한 코드 포함)

이전 강의에서 인터페이스를 구현해 보았는데, 이번 강의에서는 인터페이스에 버튼 기능을 구현해 보겠습니다! !

첫 번째 강의 링크: 나를 클릭하세요

두 번째 강의 링크: click me

이전 강의에서는 ui 파일을 py 파일로 변환했습니다.

여기에 이미지 설명을 삽입하세요

지난 강의의 코드:

# -*- coding: utf-8 -*-
#
# Created by: PyQt5 UI code generator 5.11.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_FindAndReplaceDlg(object):
    def setupUi(self, FindAndReplaceDlg):
        FindAndReplaceDlg.setObjectName("FindAndReplaceDlg")
        FindAndReplaceDlg.resize(424, 180)
        self.line = QtWidgets.QFrame(FindAndReplaceDlg)
        self.line.setGeometry(QtCore.QRect(297, 9, 20, 161))
        self.line.setFrameShape(QtWidgets.QFrame.VLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.widget = QtWidgets.QWidget(FindAndReplaceDlg)
        self.widget.setGeometry(QtCore.QRect(10, 9, 286, 158))
        self.widget.setObjectName("widget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.label = QtWidgets.QLabel(self.widget)
        self.label.setTextFormat(QtCore.Qt.AutoText)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
        self.findLineEdit = QtWidgets.QLineEdit(self.widget)
        self.findLineEdit.setObjectName("findLineEdit")
        self.gridLayout.addWidget(self.findLineEdit, 0, 1, 1, 1)
        self.label_2 = QtWidgets.QLabel(self.widget)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
        self.replaceLineEdit = QtWidgets.QLineEdit(self.widget)
        self.replaceLineEdit.setObjectName("replaceLineEdit")
        self.gridLayout.addWidget(self.replaceLineEdit, 1, 1, 1, 1)
        self.verticalLayout.addLayout(self.gridLayout)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.caseCheckBox = QtWidgets.QCheckBox(self.widget)
        self.caseCheckBox.setObjectName("caseCheckBox")
        self.horizontalLayout.addWidget(self.caseCheckBox)
        self.wholeCheckBox = QtWidgets.QCheckBox(self.widget)
        self.wholeCheckBox.setChecked(False)
        self.wholeCheckBox.setObjectName("wholeCheckBox")
        self.horizontalLayout.addWidget(self.wholeCheckBox)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.label_3 = QtWidgets.QLabel(self.widget)
        self.label_3.setObjectName("label_3")
        self.horizontalLayout_2.addWidget(self.label_3)
        self.syntaxComboBox = QtWidgets.QComboBox(self.widget)
        self.syntaxComboBox.setObjectName("syntaxComboBox")
        self.syntaxComboBox.addItem("")
        self.syntaxComboBox.addItem("")
        self.horizontalLayout_2.addWidget(self.syntaxComboBox)
        self.verticalLayout.addLayout(self.horizontalLayout_2)
        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.verticalLayout.addItem(spacerItem)
        self.widget1 = QtWidgets.QWidget(FindAndReplaceDlg)
        self.widget1.setGeometry(QtCore.QRect(316, 10, 99, 155))
        self.widget1.setObjectName("widget1")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget1)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.findButton = QtWidgets.QPushButton(self.widget1)
        self.findButton.setObjectName("findButton")
        self.verticalLayout_2.addWidget(self.findButton)
        self.replaceButton = QtWidgets.QPushButton(self.widget1)
        self.replaceButton.setObjectName("replaceButton")
        self.verticalLayout_2.addWidget(self.replaceButton)
        self.replaceAllButton = QtWidgets.QPushButton(self.widget1)
        self.replaceAllButton.setObjectName("replaceAllButton")
        self.verticalLayout_2.addWidget(self.replaceAllButton)
        spacerItem1 = QtWidgets.QSpacerItem(20, 13, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        self.verticalLayout_2.addItem(spacerItem1)
        self.closeButton = QtWidgets.QPushButton(self.widget1)
        self.closeButton.setObjectName("closeButton")
        self.verticalLayout_2.addWidget(self.closeButton)
        self.label.setBuddy(self.findLineEdit)
        self.label_2.setBuddy(self.replaceLineEdit)
        self.label_3.setBuddy(self.syntaxComboBox)

        self.retranslateUi(FindAndReplaceDlg)
        self.closeButton.clicked.connect(FindAndReplaceDlg.reject)
        QtCore.QMetaObject.connectSlotsByName(FindAndReplaceDlg)

    def retranslateUi(self, FindAndReplaceDlg):
        _translate = QtCore.QCoreApplication.translate
        FindAndReplaceDlg.setWindowTitle(_translate("FindAndReplaceDlg", "Find and Replace"))
        self.label.setText(_translate("FindAndReplaceDlg", "Find &what:"))
        self.label_2.setText(_translate("FindAndReplaceDlg", "Replace with:"))
        self.caseCheckBox.setText(_translate("FindAndReplaceDlg", "&Case sensitive"))
        self.wholeCheckBox.setText(_translate("FindAndReplaceDlg", "Wh&ole words"))
        self.label_3.setText(_translate("FindAndReplaceDlg", "&Syntax:"))
        self.syntaxComboBox.setItemText(0, _translate("FindAndReplaceDlg", "Literal text"))
        self.syntaxComboBox.setItemText(1, _translate("FindAndReplaceDlg", "Regular expression"))
        self.findButton.setText(_translate("FindAndReplaceDlg", "&Find"))
        self.replaceButton.setText(_translate("FindAndReplaceDlg", "&Replace"))
        self.replaceAllButton.setText(_translate("FindAndReplaceDlg", "Replace &All"))
        self.closeButton.setText(_translate("FindAndReplaceDlg", "Close"))




1. 위 코드의 마지막 부분을 주석 처리합니다.

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = QtWidgets.QDialog()
    ui = Ui_FindAndReplaceDlg()
    ui.setupUi(mainWindow)
    mainWindow.show()
    sys.exit(app.exec_())

2. 새로운 py 파일을 생성합니다

여기에 이미지 설명을 삽입하세요

# -*- coding: utf-8 -*-
'''
@Time    :2023/8/22 15:34
@作者    :一晌小贪欢
@联系    :[email protected]
'''


import re
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import untitled

MAC = True
try:
    from PyQt5.QtGui import qt_mac_set_native_menubar
except ImportError:
    MAC = False

class FindAndReplaceDlg(QDialog,
                        untitled.Ui_FindAndReplaceDlg):
    found = pyqtSignal(int)
    notfound = pyqtSignal(int)
    def __init__(self, text, parent=None):
        super(FindAndReplaceDlg, self).__init__(parent)
        self.__text = text
        self.__index = 0
        self.setupUi(self)
        if not MAC:
            self.findButton.setFocusPolicy(Qt.NoFocus)

QDialog① 과 를 상속받게 됩니다 Ui_FindAndReplaceDlg. Python 프로그래밍에서는 다중 상속을 사용할 필요가 거의 없지만 여기서 사용하면 그렇지 않은 것보다 훨씬 간단해집니다. 이러한 방식으로 하위 클래스는 FindAndReplaceDlg상속받은 두 클래스의 결합이 되며 해당 속성에 직접 액세스할 수 있습니다. 물론 해당 하위 클래스를 앞에 추가하는 것을 잊지 마세요 self.

② 이전 설정에서는 초기화 프로그램이 대화 상자에서 처리한 데이터를 허용하고 상위 창 개체도 허용할 수 있었습니다. 첫 번째 상속 클래스는 QDialog다음을 호출합니다.super()。

③ 여기서 setupUi()메소드 호출은 이전에 많이 본 적이 없는 것입니다. 이 방법은 빌드 모듈에서 제공됩니다. 호출되면 UI 파일에 주어진 모든 위젯을 생성하고, 디자인에 따라 각 위젯을 배치하고, 속성과 탭 순서를 설정하고, 각 연결을 설정합니다. 즉, Qt Designer에서 디자인한 창이 다시 생성됩니다. )

3. 신호 슬롯 연결:

setupUi()메서드는 정적 메서드인 으로 호출되며 QtCore .QMetaObject.connectSlotsByName()특정 명명 규칙을 사용하여 양식 위젯의 다양한 신호와 하위 클래스 메서드 사이에 신호 슬롯 연결을 생성합니다. 양식의 모든 메소드 이름은 on_widgetName_ signalName위젯의 신호를 통해 연결됩니다.

예: 양식에 findLineEdit명명된 QLineEdit위젯 이 있습니다. 에서 QLineEdit방출되는 신호 중 하나입니다 textEdited(str). 따라서 초기화 프로그램에서 메서드를 호출하지 않고 이 신호를 연결하려는 경우 connect()해당 작업을 에 맡기면 됩니다 setupUi(). 이 방법을 사용하면 신호를 연결하기 위한 슬롯을 호출하는 동안 on_findLineEdit_textEdited제대로 작동합니다 . clicked()이는 Qt Designer에서 시각적으로 연결되는 닫기 버튼 신호를 제외하고 폼의 모든 연결에 사용되는 방법입니다 .

@pyqtSlot(str)
def on_findLineEdit_textEdited(self, text):
    self.__index = 0
    self.updateUi()

전체 코드(main.py)

사진 설명을 추가해주세요

# -*- coding: utf-8 -*-
'''
@Time    :2023/8/22 15:34
@作者    :一晌小贪欢
@联系    :[email protected]
'''


import re
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import untitled


MAC = True
try:
    from PyQt5.QtGui import qt_mac_set_native_menubar
except ImportError:
    MAC = False

class FindAndReplaceDlg(QDialog,
                        untitled.Ui_FindAndReplaceDlg):
    found = pyqtSignal(int)
    notfound = pyqtSignal(int)
    def __init__(self, text, parent=None):
        super(FindAndReplaceDlg, self).__init__(parent)
        self.__text = text
        self.__index = 0
        self.setupUi(self)
        if not MAC:
            self.findButton.setFocusPolicy(Qt.NoFocus)

    @pyqtSlot(str)
    def on_findLineEdit_textEdited(self, text):
        self.__index = 0
        self.updateUi()

    def makeRegex(self):
        findText = self.findLineEdit.text()
        if findText == '*':
            findText = '.*'
        if self.syntaxComboBox.currentText() == "Literal":
            findText = re.escape(findText)
        flags = re.MULTILINE | re.DOTALL | re.UNICODE
        if not self.caseCheckBox.isChecked():
            flags |= re.IGNORECASE
        if self.wholeCheckBox.isChecked():
            findText = r"\b{}\b".format(findText)
        return re.compile(findText, flags)

    @pyqtSlot(bool)
    def on_findButton_clicked(self):
        regex = self.makeRegex()
        match = regex.search(self.__text, self.__index)
        if match is not None:
            self.__index = match.end()
            self.found.emit(match.start())
        else:
            self.notfound.emit(-1)

    @pyqtSlot(bool)
    def on_replaceButton_clicked(self):
        regex = self.makeRegex()
        self.__text = regex.sub(self.replaceLineEdit.text(),
                                self.__text, 1)

    @pyqtSlot(bool)
    def on_replaceAllButton_clicked(self):
        regex = self.makeRegex()
        self.__text = regex.sub(self.replaceLineEdit.text(),
                                self.__text)

    def updateUi(self):
        enable = bool(self.findLineEdit.text())
        self.findButton.setEnabled(enable)
        self.replaceButton.setEnabled(enable)
        self.replaceAllButton.setEnabled(enable)

    def text(self):
        return self.__text



if __name__ == "__main__":
    import sys

    text = """US experience shows that, unlike traditional patents,
software patents do not encourage innovation and R&D, quite the
contrary. In particular they hurt small and medium-sized enterprises
and generally newcomers in the market. They will just weaken the market
and increase spending on patents and litigation, at the expense of
technological innovation and research. Especially dangerous are
attempts to abuse the patent system by preventing interoperability as a
means of avoiding competition with technological ability.
--- Extract quoted from Linus Torvalds and Alan Cox's letter
to the President of the European Parliament
http://www.effi.org/patentit/patents_torvalds_cox.html"""


    def found(where):
        print("Found at {}".format(where))


    def nomore():
        print("No more found")


    app = QApplication(sys.argv)
    form = FindAndReplaceDlg(text)
    form.found.connect(found)
    form.notfound.connect(nomore)
    form.show()
    app.exec_()
    print(form.text())


제목 없음.py

# -*- coding: utf-8 -*-
#
# Created by: PyQt5 UI code generator 5.11.2
#
# WARNING! All changes made in this file will be lost!
import sys

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_FindAndReplaceDlg(object):
    def setupUi(self, FindAndReplaceDlg):
        FindAndReplaceDlg.setObjectName("FindAndReplaceDlg")
        FindAndReplaceDlg.resize(424, 180)
        self.line = QtWidgets.QFrame(FindAndReplaceDlg)
        self.line.setGeometry(QtCore.QRect(297, 9, 20, 161))
        self.line.setFrameShape(QtWidgets.QFrame.VLine)
        self.line.setFrameShadow(QtWidgets.QFrame.Sunken)
        self.line.setObjectName("line")
        self.widget = QtWidgets.QWidget(FindAndReplaceDlg)
        self.widget.setGeometry(QtCore.QRect(10, 9, 286, 158))
        self.widget.setObjectName("widget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.widget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout.setObjectName("verticalLayout")
        self.gridLayout = QtWidgets.QGridLayout()
        self.gridLayout.setObjectName("gridLayout")
        self.label = QtWidgets.QLabel(self.widget)
        self.label.setTextFormat(QtCore.Qt.AutoText)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
        self.findLineEdit = QtWidgets.QLineEdit(self.widget)
        self.findLineEdit.setObjectName("findLineEdit")
        self.gridLayout.addWidget(self.findLineEdit, 0, 1, 1, 1)
        self.label_2 = QtWidgets.QLabel(self.widget)
        self.label_2.setObjectName("label_2")
        self.gridLayout.addWidget(self.label_2, 1, 0, 1, 1)
        self.replaceLineEdit = QtWidgets.QLineEdit(self.widget)
        self.replaceLineEdit.setObjectName("replaceLineEdit")
        self.gridLayout.addWidget(self.replaceLineEdit, 1, 1, 1, 1)
        self.verticalLayout.addLayout(self.gridLayout)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.caseCheckBox = QtWidgets.QCheckBox(self.widget)
        self.caseCheckBox.setObjectName("caseCheckBox")
        self.horizontalLayout.addWidget(self.caseCheckBox)
        self.wholeCheckBox = QtWidgets.QCheckBox(self.widget)
        self.wholeCheckBox.setChecked(False)
        self.wholeCheckBox.setObjectName("wholeCheckBox")
        self.horizontalLayout.addWidget(self.wholeCheckBox)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.label_3 = QtWidgets.QLabel(self.widget)
        self.label_3.setObjectName("label_3")
        self.horizontalLayout_2.addWidget(self.label_3)
        self.syntaxComboBox = QtWidgets.QComboBox(self.widget)
        self.syntaxComboBox.setObjectName("syntaxComboBox")
        self.syntaxComboBox.addItem("")
        self.syntaxComboBox.addItem("")
        self.horizontalLayout_2.addWidget(self.syntaxComboBox)
        self.verticalLayout.addLayout(self.horizontalLayout_2)
        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.verticalLayout.addItem(spacerItem)
        self.widget1 = QtWidgets.QWidget(FindAndReplaceDlg)
        self.widget1.setGeometry(QtCore.QRect(316, 10, 99, 155))
        self.widget1.setObjectName("widget1")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.widget1)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_2.setObjectName("verticalLayout_2")
        self.findButton = QtWidgets.QPushButton(self.widget1)
        self.findButton.setObjectName("findButton")
        self.verticalLayout_2.addWidget(self.findButton)
        self.replaceButton = QtWidgets.QPushButton(self.widget1)
        self.replaceButton.setObjectName("replaceButton")
        self.verticalLayout_2.addWidget(self.replaceButton)
        self.replaceAllButton = QtWidgets.QPushButton(self.widget1)
        self.replaceAllButton.setObjectName("replaceAllButton")
        self.verticalLayout_2.addWidget(self.replaceAllButton)
        spacerItem1 = QtWidgets.QSpacerItem(20, 13, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed)
        self.verticalLayout_2.addItem(spacerItem1)
        self.closeButton = QtWidgets.QPushButton(self.widget1)
        self.closeButton.setObjectName("closeButton")
        self.verticalLayout_2.addWidget(self.closeButton)
        self.label.setBuddy(self.findLineEdit)
        self.label_2.setBuddy(self.replaceLineEdit)
        self.label_3.setBuddy(self.syntaxComboBox)

        self.retranslateUi(FindAndReplaceDlg)
        self.closeButton.clicked.connect(FindAndReplaceDlg.reject)
        QtCore.QMetaObject.connectSlotsByName(FindAndReplaceDlg)

    def retranslateUi(self, FindAndReplaceDlg):
        _translate = QtCore.QCoreApplication.translate
        FindAndReplaceDlg.setWindowTitle(_translate("FindAndReplaceDlg", "Find and Replace"))
        self.label.setText(_translate("FindAndReplaceDlg", "Find &what:"))
        self.label_2.setText(_translate("FindAndReplaceDlg", "Replace with:"))
        self.caseCheckBox.setText(_translate("FindAndReplaceDlg", "&Case sensitive"))
        self.wholeCheckBox.setText(_translate("FindAndReplaceDlg", "Wh&ole words"))
        self.label_3.setText(_translate("FindAndReplaceDlg", "&Syntax:"))
        self.syntaxComboBox.setItemText(0, _translate("FindAndReplaceDlg", "Literal text"))
        self.syntaxComboBox.setItemText(1, _translate("FindAndReplaceDlg", "Regular expression"))
        self.findButton.setText(_translate("FindAndReplaceDlg", "&Find"))
        self.replaceButton.setText(_translate("FindAndReplaceDlg", "&Replace"))
        self.replaceAllButton.setText(_translate("FindAndReplaceDlg", "Replace &All"))
        self.closeButton.setText(_translate("FindAndReplaceDlg", "Close"))


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    mainWindow = QtWidgets.QDialog()
    ui = Ui_FindAndReplaceDlg()
    ui.setupUi(mainWindow)
    mainWindow.show()
    sys.exit(app.exec_())

제목 없음.ui

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>FindAndReplaceDlg</class>
 <widget class="QDialog" name="FindAndReplaceDlg">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>400</width>
    <height>300</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>Dialog</string>
  </property>
  <widget class="Line" name="line">
   <property name="geometry">
    <rect>
     <x>270</x>
     <y>60</y>
     <width>3</width>
     <height>61</height>
    </rect>
   </property>
   <property name="orientation">
    <enum>Qt::Vertical</enum>
   </property>
  </widget>
  <widget class="QWidget" name="layoutWidget">
   <property name="geometry">
    <rect>
     <x>20</x>
     <y>30</y>
     <width>231</width>
     <height>48</height>
    </rect>
   </property>
   <layout class="QGridLayout" name="gridLayout">
    <item row="0" column="0">
     <widget class="QLabel" name="label">
      <property name="text">
       <string>Find &amp;What:</string>
      </property>
      <property name="buddy">
       <cstring>findLineEidt</cstring>
      </property>
     </widget>
    </item>
    <item row="0" column="1">
     <widget class="QLineEdit" name="findLineEidt">
      <property name="inputMask">
       <string/>
      </property>
     </widget>
    </item>
    <item row="1" column="0">
     <widget class="QLabel" name="label_2">
      <property name="text">
       <string>Replace w&amp;ith: </string>
      </property>
      <property name="buddy">
       <cstring>replaceLineEidt</cstring>
      </property>
     </widget>
    </item>
    <item row="1" column="1">
     <widget class="QLineEdit" name="replaceLineEidt">
      <property name="inputMask">
       <string/>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QWidget" name="layoutWidget">
   <property name="geometry">
    <rect>
     <x>20</x>
     <y>110</y>
     <width>204</width>
     <height>40</height>
    </rect>
   </property>
   <layout class="QGridLayout" name="gridLayout_2">
    <item row="0" column="1">
     <widget class="QCheckBox" name="caseCheckBox_2">
      <property name="text">
       <string>Wh&amp;ole words</string>
      </property>
     </widget>
    </item>
    <item row="0" column="0">
     <widget class="QCheckBox" name="caseCheckBox">
      <property name="text">
       <string>&amp;Case sensitive</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QWidget" name="layoutWidget">
   <property name="geometry">
    <rect>
     <x>20</x>
     <y>150</y>
     <width>191</width>
     <height>40</height>
    </rect>
   </property>
   <layout class="QGridLayout" name="gridLayout_3">
    <item row="0" column="0">
     <widget class="QLabel" name="label_3">
      <property name="text">
       <string>&amp;Syntax:</string>
      </property>
      <property name="buddy">
       <cstring>syntaxComboBox</cstring>
      </property>
     </widget>
    </item>
    <item row="0" column="1">
     <widget class="QComboBox" name="syntaxComboBox">
      <item>
       <property name="text">
        <string>Literal text</string>
       </property>
      </item>
      <item>
       <property name="text">
        <string>Regular expression</string>
       </property>
      </item>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QWidget" name="layoutWidget">
   <property name="geometry">
    <rect>
     <x>280</x>
     <y>20</y>
     <width>77</width>
     <height>158</height>
    </rect>
   </property>
   <layout class="QGridLayout" name="gridLayout_4">
    <item row="2" column="0">
     <widget class="QPushButton" name="replaceAllButton">
      <property name="text">
       <string>Replace &amp;All</string>
      </property>
     </widget>
    </item>
    <item row="3" column="0">
     <spacer name="verticalSpacer_2">
      <property name="orientation">
       <enum>Qt::Vertical</enum>
      </property>
      <property name="sizeHint" stdset="0">
       <size>
        <width>20</width>
        <height>40</height>
       </size>
      </property>
     </spacer>
    </item>
    <item row="1" column="0">
     <widget class="QPushButton" name="replaceButton">
      <property name="text">
       <string>&amp;Replace</string>
      </property>
     </widget>
    </item>
    <item row="0" column="0">
     <widget class="QPushButton" name="findButton">
      <property name="text">
       <string>&amp;Find</string>
      </property>
     </widget>
    </item>
    <item row="4" column="0">
     <widget class="QPushButton" name="closeButton">
      <property name="text">
       <string>Close</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
 </widget>
 <resources/>
 <connections>
  <connection>
   <sender>closeButton</sender>
   <signal>clicked()</signal>
   <receiver>FindAndReplaceDlg</receiver>
   <slot>reject()</slot>
   <hints>
    <hint type="sourcelabel">
     <x>317</x>
     <y>165</y>
    </hint>
    <hint type="destinationlabel">
     <x>152</x>
     <y>216</y>
    </hint>
   </hints>
  </connection>
 </connections>
</ui>

오늘 PyQty5에 대해 배운 다섯 번째 교훈입니다. 다음 시간에 주의 깊게 공부하겠습니다.

모두가 도움을 받았으면 좋겠어

사무 자동화 전용 작은 프로그래머#

이거 봤어요, 팔로우 + 좋아요 + 북마크 = 헤매지 마세요! !

파이썬 사무자동화에 대해 더 알고 싶다면 주목해주세요!

Supongo que te gusta

Origin blog.csdn.net/weixin_42636075/article/details/132428811
Recomendado
Clasificación