使用 PySide 中的 QUiLoader 和 UI 文件在运行时动态创建用户界面
我真的很难将插槽从 Python
连接到 Qt Designer
UI
文件。 我已经完成了在 PySide
上可以找到的所有教程(例如:http: //zetcode.com/gui/pysidetutorial/eventsandsignals/)
当您在代码中设置GUI时,它非常容易,但我们真的很想使用 Qt Designer 和 UI 文件。
其他一些线程只是指出使用 pyuic
将 .ui
转换为 .py
文件,但如果可能的话我真的很想这样做这是在运行时。
到目前为止,这是我的代码。 我不知道如何将 connectBtn
连接到 UI 文件中的 Connect
:
def initUI(self):
loader = QUiLoader()
file = QFile("designer_test.ui")
file.open(QFile.ReadOnly)
myWidget = loader.load(file, self)
#print(dir(myWidget))
file.close()
layout = QtGui.QVBoxLayout()
layout.addWidget(myWidget)
self.setLayout(layout)
connectBtn = QtGui.QPushButton("Connect", self)
connectBtn.clicked.connect(self.connectClicked)
myWidget.setWindowTitle('Window')
myWidget.show()
def connectClicked(self):
print("works")
I'm really having a hard time connecting slots from Python
to Qt Designer
UI
files.
I've been through all tutorials I could find on PySide
(ex: http://zetcode.com/gui/pysidetutorial/eventsandsignals/)
Its quite easy when you set up the GUI in code, but we really would like to use Qt Designer and UI files.
Some other threads just points to the use of pyuic
to convert .ui
to .py
files, but if its possible I would really like to do this at run-time.
Here is my code so far.
I have no clue how to connect the connectBtn
to the Connect
in the UI file :
def initUI(self):
loader = QUiLoader()
file = QFile("designer_test.ui")
file.open(QFile.ReadOnly)
myWidget = loader.load(file, self)
#print(dir(myWidget))
file.close()
layout = QtGui.QVBoxLayout()
layout.addWidget(myWidget)
self.setLayout(layout)
connectBtn = QtGui.QPushButton("Connect", self)
connectBtn.clicked.connect(self.connectClicked)
myWidget.setWindowTitle('Window')
myWidget.show()
def connectClicked(self):
print("works")
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您检查过此页面吗:在中使用设计器 UI 文件你的应用程序
它适用于 C++,但我认为这些概念与你在 python 中尝试做的概念相同。
根据该页面,要获取由 Ui 文件创建的小部件,您需要调用 findChild()。
另外,这个问题。
Have you checked this page: Using a Designer UI File in Your Application
It is for C++, but I think the concepts are the same as what you're trying to do in python.
According to that page, to get the widgets that are created by the Ui file you need to call findChild().
Also, this question.
我制作了这个 自动连接器 来帮助我解决这个问题......请看一下它。
I've made this auto-connector to help me with this... please take a look at it.