import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QFileDialog
from PyQt5.QtCore import QCoreApplication
from PyQt5 import uic
qt_design_ui = "/home/lin/program/Qt/Notepad/notepad.ui"
Ui_Notepad, QtBaseClass = uic.loadUiType(qt_design_ui)
class Notepad(QMainWindow, Ui_Notepad):
def __init__(self):
super(Notepad, self).__init__()
self.setupUi(self)
def on_quitButton_clicked(self):
# QCoreApplication.quit();
print("h")
if __name__ == "__main__":
app = QApplication(sys.argv)
window = Notepad()
window.show()
sys.exit(app.exec_())
UI-Datei von QtDesign generiert:PyQt5 Call-Slot für zwei mal
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Notepad</class>
<widget class="QMainWindow" name="Notepad">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>Notepad</string>
</property>
<widget class="QWidget" name="centralWidget">
<widget class="QWidget" name="layoutWidget">
<property name="geometry">
<rect>
<x>70</x>
<y>10</y>
<width>258</width>
<height>222</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QPushButton" name="quitButton">
<property name="layoutDirection">
<enum>Qt::LeftToRight</enum>
</property>
<property name="text">
<string>Quit</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>19</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
<action name="actionOpen">
<property name="text">
<string>Open</string>
</property>
</action>
<action name="actionSave">
<property name="text">
<string>Save</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
Wenn die Schaltfläche geklickt wird, ein 'h' soll ausgegeben werden.
Allerdings werden zwei 'h's actural ausgegeben.
Vielleicht ist die Verbindung für zwei mal irgendwo verbindlich. Aber ich weiß nicht, wo es passiert.
Und wenn ich self.quitButton.clicked.connect(self.on_quitButton_clicked)
in __init__
hinzufügen, werden 3 'h ausgegeben.
Beim Schreiben in C++ ist es in Ordnung.
Version von Python3:
Python 3.5.2
Version von PyQt5:
Name: PyQt5
Version: 5.9
Summary: Python bindings for the Qt cross platform UI and application toolkit
Home-page: https://www.riverbankcomputing.com/software/pyqt/
Author: Riverbank Computing Limited
Author-email: [email protected]
License: GPL v3
Location: /usr/local/lib/python3.5/dist-packages
Requires: sip
Ich kann nichts falsch in Ihrem Code finden und ich bezweifle, dass der Fehler durch die 8 Zeilen verursacht wird, die Sie gepostet haben. Sie müssen ein [MVCE] (https://stackoverflow.com/help/mcve) erstellen, damit wir das Problem reproduzieren können. Beginnen Sie mit Ihrem vollständigen Programm, einschließlich der automatisch generierten Dateien von QtDesigner, und entfernen Sie alles, was nicht zum Fehler beiträgt. Sei streng darüber. Streben Sie ein einzelnes Skript an, das wir einfach kopieren, einfügen und ausführen können. Ich bin zu 99% sicher, dass Sie den Fehler selbst finden werden. – titusjan
@titusjan Ich überlege mir, weitere Details hinzuzufügen. Und eine ähnliche Frage: [PyQT: QFileDialog öffnet das Fenster nach dem Klicken auf Abbrechen oder ok weiter] (https://gis.stackexchange.com/questions/171395/pyqt-qfiledialog-keeps-on-opening-window-after- Klick-auf-Abbrechen-oder-ok) – chaosink
@chaosink, Welche * spezifische * Version von pyqt benutzt du und auf welcher Plattform? – ekhumoro