Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

增加1.20例子 #12

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
892768447 merged 7 commits into PyQt5:master from 625781186:master
Apr 16, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion README.md
View file Open in desktop
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,10 @@
- [1.17 下拉选择联动](下拉选择联动/)
- [1.18 人脸描点检测](人脸描点检测/)
- [1.19 腾讯视频热播列表](腾讯视频热播列表/)
- [1.20 exec()动态生成控件](partner_625781186/1.exec动态生成控件/)
- 1.20 exec()动态生成控件
- [1. 动态控件基础例子 - 动态生成按钮](partner_625781186/1.exec动态生成控件/dynamic_button)
- [2. 动态控件基础例子 - 动态生成菜单](partner_625781186/1.exec动态生成控件/dynamic_Menu)
- [3. 配合setting记录模型类型](partner_625781186/1.exec动态生成控件/)
- [1.21 仿QQ设置面板](仿QQ设置面板/)
- [1.22 Json生成QTreeWidget](Json生成QTreeWidget/)
- [1.23 嵌入外部窗口](嵌入外部窗口/)
Expand Down
View file Open in desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'D:\pyPro\dynamic_Menu\动态控件.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(370, 403)
Dialog.setSizeGripEnabled(True)
self.verticalLayout = QtWidgets.QVBoxLayout(Dialog)
self.verticalLayout.setObjectName("verticalLayout")

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

def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))


if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())

Empty file.
View file Open in desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
<!-- eric project file for project dynamic_Controls -->
<!-- Saved: 2018年04月11日, 02:00:19 -->
<!-- Copyright (C) 2018 , -->
<Project version="5.1">
<Language>en_US</Language>
<Hash>b35a15d37a7cb52779310396c238b2e70ac76888</Hash>
<ProgLanguage mixed="0">Python3</ProgLanguage>
<ProjectType>PyQt5</ProjectType>
<Version>0.1</Version>
<Author></Author>
<Email></Email>
<Eol index="0"/>
<Sources>
<Source>Ui_动态控件.py</Source>
<Source>__init__.py</Source>
<Source>动态控件.py</Source>
</Sources>
<Forms>
<Form>动态控件.ui</Form>
</Forms>
<Translations/>
<Resources/>
<Interfaces/>
<Others/>
<Vcs>
<VcsType>None</VcsType>
</Vcs>
<FiletypeAssociations>
<FiletypeAssociation pattern="*.e4p" type="OTHERS"/>
<FiletypeAssociation pattern="*.idl" type="INTERFACES"/>
<FiletypeAssociation pattern="*.md" type="OTHERS"/>
<FiletypeAssociation pattern="*.py" type="SOURCES"/>
<FiletypeAssociation pattern="*.py3" type="SOURCES"/>
<FiletypeAssociation pattern="*.pyw" type="SOURCES"/>
<FiletypeAssociation pattern="*.pyw3" type="SOURCES"/>
<FiletypeAssociation pattern="*.qm" type="TRANSLATIONS"/>
<FiletypeAssociation pattern="*.qrc" type="RESOURCES"/>
<FiletypeAssociation pattern="*.rst" type="OTHERS"/>
<FiletypeAssociation pattern="*.ts" type="TRANSLATIONS"/>
<FiletypeAssociation pattern="*.txt" type="OTHERS"/>
<FiletypeAssociation pattern="*.ui" type="FORMS"/>
<FiletypeAssociation pattern="README" type="OTHERS"/>
<FiletypeAssociation pattern="README.*" type="OTHERS"/>
</FiletypeAssociations>
</Project>
View file Open in desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
# -*- coding: utf-8 -*-

"""
Module implementing Dialog.
"""

from PyQt5 import QtGui, QtWidgets, QtCore, QtWinExtras
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

from functools import partial
from Ui_动态控件 import Ui_Dialog

class Dialog(QDialog, Ui_Dialog):

def __init__(self, parent=None):

super(Dialog, self).__init__(parent)
self.setupUi(self)

self.dynamic1()

self.dynamic2()

# 法一
def dynamic1(self):
for i in range(5):
self.pushButton = QtWidgets.QPushButton(self)
self.pushButton.setText("pushButton%d"%i)
self.pushButton.setObjectName("pushButton%d"%i)
self.verticalLayout.addWidget(self.pushButton)
self.pushButton.setContextMenuPolicy(Qt.CustomContextMenu)
self.pushButton.customContextMenuRequested.connect(lambda:self.helpMenu(i))#右键请求,传入i实际上一直是4
self.pushButton.clicked.connect(self.pr)

# 法二
def dynamic2(self):
for i in range(5, 8):
txt="""
self.pushButton_{i} = QtWidgets.QPushButton(self);
self.pushButton_{i}.setText("pushButton{i}");
self.pushButton_{i}.setObjectName("pushButton{i}");
self.verticalLayout.addWidget(self.pushButton_{i});

self.pushButton_{i}.setContextMenuPolicy(Qt.CustomContextMenu)
self.pushButton_{i}.customContextMenuRequested.connect(partial(self.helpMenu,i))#右键请求,用lambda会报错,partial需要import

self.pushButton_{i}.clicked.connect(self.pr)
""".format(i=i)
exec(txt)
#只能法二可用的方式
self.pushButton_5.clicked.connect(self.pr2)
self.pushButton_6.clicked.connect(self.pr2)
self.pushButton_7.clicked.connect(self.pr2)


def helpMenu(self, *type):
'''帮助按钮的右键菜单'''
print(type)
popMenu =QMenu()

if type[0]==5 or self.sender().text()== 'pushButton0':
popMenu.addAction(u'关于',self.pr)
popMenu.addSeparator()

elif type[0]==6 or self.sender().text()== 'pushButton1':
popMenu.addAction(u'清理图片',self.pr)
popMenu.addSeparator()

elif type[0]==7 or self.sender().text()== 'pushButton2':
gitMenu=QMenu('同步到Git', popMenu)

self.pushAction=QAction(u'上传', self, triggered=lambda:self.pr)
gitMenu.addAction(self.pushAction)

self.pullAction=QAction(u'下载', self, triggered=lambda:self.pr)
gitMenu.addAction(self.pullAction)

gitMenu.addSeparator()
gitMenu.addAction(u'配置仓库',lambda:self.pr)

popMenu.addAction(gitMenu.menuAction())#!!
popMenu.exec_(QCursor.pos())#鼠标位置

def pr(self):
'''法一和法二都可用的调用
if self.sender().objectName=='XXX':
self.pr2()
'''
print(self.sender().text())
print(self.sender().objectName())
print(self.pushButton.text())

def pr2(self):
print(2)

if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
ui = Dialog()
ui.show()
sys.exit(app.exec_())
View file Open in desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>370</width>
<height>403</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<property name="sizeGripEnabled">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout"/>
</widget>
<resources/>
<connections/>
</ui>
View file Open in desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'D:\pyPro\dynamic_button\动态控件.ui'
#
# Created by: PyQt5 UI code generator 5.9.2
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(370, 403)
Dialog.setSizeGripEnabled(True)
self.verticalLayout = QtWidgets.QVBoxLayout(Dialog)
self.verticalLayout.setObjectName("verticalLayout")

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

def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))


if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
Dialog = QtWidgets.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())

Empty file.
View file Open in desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Project SYSTEM "Project-5.1.dtd">
<!-- eric project file for project dynamic_Controls -->
<!-- Saved: 2018年04月11日, 02:00:19 -->
<!-- Copyright (C) 2018 , -->
<Project version="5.1">
<Language>en_US</Language>
<Hash>b35a15d37a7cb52779310396c238b2e70ac76888</Hash>
<ProgLanguage mixed="0">Python3</ProgLanguage>
<ProjectType>PyQt5</ProjectType>
<Version>0.1</Version>
<Author></Author>
<Email></Email>
<Eol index="0"/>
<Sources>
<Source>Ui_动态控件.py</Source>
<Source>__init__.py</Source>
<Source>动态控件.py</Source>
</Sources>
<Forms>
<Form>动态控件.ui</Form>
</Forms>
<Translations/>
<Resources/>
<Interfaces/>
<Others/>
<Vcs>
<VcsType>None</VcsType>
</Vcs>
<FiletypeAssociations>
<FiletypeAssociation pattern="*.e4p" type="OTHERS"/>
<FiletypeAssociation pattern="*.idl" type="INTERFACES"/>
<FiletypeAssociation pattern="*.md" type="OTHERS"/>
<FiletypeAssociation pattern="*.py" type="SOURCES"/>
<FiletypeAssociation pattern="*.py3" type="SOURCES"/>
<FiletypeAssociation pattern="*.pyw" type="SOURCES"/>
<FiletypeAssociation pattern="*.pyw3" type="SOURCES"/>
<FiletypeAssociation pattern="*.qm" type="TRANSLATIONS"/>
<FiletypeAssociation pattern="*.qrc" type="RESOURCES"/>
<FiletypeAssociation pattern="*.rst" type="OTHERS"/>
<FiletypeAssociation pattern="*.ts" type="TRANSLATIONS"/>
<FiletypeAssociation pattern="*.txt" type="OTHERS"/>
<FiletypeAssociation pattern="*.ui" type="FORMS"/>
<FiletypeAssociation pattern="README" type="OTHERS"/>
<FiletypeAssociation pattern="README.*" type="OTHERS"/>
</FiletypeAssociations>
</Project>
View file Open in desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
# -*- coding: utf-8 -*-

"""
Module implementing Dialog.
"""

from PyQt5 import QtGui, QtWidgets, QtCore, QtWinExtras
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

from Ui_动态控件 import Ui_Dialog


class Dialog(QDialog, Ui_Dialog):

def __init__(self, parent=None):

super(Dialog, self).__init__(parent)
self.setupUi(self)
self.dynamic1()
self.dynamic2()

# 法一
def dynamic1(self):
for i in range(5):
self.pushButton = QtWidgets.QPushButton(self)
self.pushButton.setText("pushButton%d"%i)
self.pushButton.setObjectName("pushButton%d"%i)
self.verticalLayout.addWidget(self.pushButton)
self.pushButton.clicked.connect(self.pr)
# 法二
def dynamic2(self):
for i in range(4):
txt="""
self.pushButton_{i} = QtWidgets.QPushButton(self);
self.pushButton_{i}.setText("pushButton{i}");
self.pushButton_{i}.setObjectName("pushButton{i}");
self.verticalLayout.addWidget(self.pushButton_{i});
self.pushButton_{i}.clicked.connect(self.pr)
""".format(i=i)
exec(txt)
#只能法二可用的方式
self.pushButton_1.clicked.connect(self.pr2)
self.pushButton_2.clicked.connect(self.pr2)
self.pushButton_3.clicked.connect(self.pr2)

def pr(self):
'''法一和法二都可用的调用
if self.sender().objectName=='XXX':
self.pr2()
'''
print(self.sender().text())
print(self.sender().objectName())
print(self.pushButton.text())

def pr2(self):
print(2)

if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
ui = Dialog()
ui.show()
sys.exit(app.exec_())
View file Open in desktop
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>Dialog</class>
<widget class="QDialog" name="Dialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>370</width>
<height>403</height>
</rect>
</property>
<property name="windowTitle">
<string>Dialog</string>
</property>
<property name="sizeGripEnabled">
<bool>true</bool>
</property>
<layout class="QVBoxLayout" name="verticalLayout"/>
</widget>
<resources/>
<connections/>
</ui>

AltStyle によって変換されたページ (->オリジナル) /