【发布时间】:2021-12-12 06:21:51
【问题描述】:
我正在尝试使用 Qt Designer 在 pycharm 中开发桌面应用程序。 所以我从设计师那里提取了一个带有我所有界面的 main_ui.py 文件
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.setWindowModality(QtCore.Qt.ApplicationModal)
MainWindow.resize(1404, 792)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(MainWindow.sizePolicy().hasHeightForWidth())
MainWindow.setSizePolicy(sizePolicy)
MainWindow.setFocusPolicy(QtCore.Qt.StrongFocus)
MainWindow.setLayoutDirection(QtCore.Qt.LeftToRight)
MainWindow.setAutoFillBackground(False)
MainWindow.setStyleSheet("")
MainWindow.setAnimated(False)
MainWindow.setTabShape(QtWidgets.QTabWidget.Rounded)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.main_fm = QtWidgets.QFrame(self.centralwidget)
self.main_fm.setGeometry(QtCore.QRect(310, -10, 1071, 800))
self.main_fm.setStyleSheet("background-color: \"#116466\"")
self.main_fm.setFrameShape(QtWidgets.QFrame.NoFrame)
self.main_fm.setFrameShadow(QtWidgets.QFrame.Plain)
self.main_fm.setObjectName("main_fm")
self.maintoolbar_fm = QtWidgets.QFrame(self.main_fm)
self.maintoolbar_fm.setGeometry(QtCore.QRect(0, 0, 1061, 35))
self.maintoolbar_fm.setLayoutDirection(QtCore.Qt.RightToLeft)
self.maintoolbar_fm.setStyleSheet("background-color: \"#116466\";")
self.maintoolbar_fm.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.maintoolbar_fm.setFrameShadow(QtWidgets.QFrame.Raised)
self.maintoolbar_fm.setObjectName("maintoolbar_fm")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.maintoolbar_fm)
self.horizontalLayout.setObjectName("horizontalLayout")
self.main_exit2_btn = QtWidgets.QPushButton(self.maintoolbar_fm)
self.main_exit2_btn.setFocusPolicy(QtCore.Qt.NoFocus)
self.main_exit2_btn.setStyleSheet("")
self.main_exit2_btn.setText("")
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap("icons/exit.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.main_exit2_btn.setIcon(icon)
self.main_exit2_btn.setFlat(True)
self.main_exit2_btn.setObjectName("main_exit2_btn")
self.horizontalLayout.addWidget(self.main_exit2_btn)
self.minim2_btn = QtWidgets.QPushButton(self.maintoolbar_fm)
self.minim2_btn.setFocusPolicy(QtCore.Qt.NoFocus)
self.minim2_btn.setStyleSheet("")
self.minim2_btn.setText("")
self.members_bt.setIcon(icon9)
self.members_bt.setIconSize(QtCore.QSize(45, 40))
self.members_bt.setFlat(True)
self.members_bt.setObjectName("members_bt")
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
self.stackedWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "ΑΞΙΟΝ ΠΕΙΡΑΙΑ"))
self.title_date.setText(_translate("MainWindow", "Todaydate"))
self.author_lb.setText(_translate("MainWindow", "David Dan"))
self.sum_oplo.setText(_translate("MainWindow", "0"))
self.sum_members_lb_4.setText(_translate("MainWindow", "Οπλομαχία:"))
self.sum_fencing.setText(_translate("MainWindow", "0"))
self.sum_members_lb_3.setText(_translate("MainWindow", "Ξιφασκια:"))
self.sum_tkd.setText(_translate("MainWindow", "0"))
self.sum_members_lb_2.setText(_translate("MainWindow", "Taekwon-Do:"))
self.sum_members.setText(_translate("MainWindow", "0"))
self.sum_members_lb.setText(_translate("MainWindow", "Σύνολο:"))
self.sum_oplo_pre.setText(_translate("MainWindow", "0"))
self.oplo_pres_lb.setText(_translate("MainWindow", "Οπλομαχία:"))
self.sum_fencing_pre.setText(_translate("MainWindow", "0"))
self.fencing_pres_lb.setText(_translate("MainWindow", "Ξιφασκια:"))
self.sum_tkd_pre.setText(_translate("MainWindow", "0"))
self.tae_pre_lb.setText(_translate("MainWindow", "Taekwon-Do:"))
self.sum_pres.setText(_translate("MainWindow", "0"))
self.sum_pres_lb.setText(_translate("MainWindow", "Σύνολο:"))
self.title_members_lb.setText(_translate("MainWindow", "Μέλη"))
self.title_present_lb.setText(_translate("MainWindow", "Παρουσίες Σήμερα"))
self.title_eco_lb.setText(_translate("MainWindow", "Οικονομικά"))
self.expe_eco_lb.setText(_translate("MainWindow", "0"))
self.exp_eco_title_lb.setText(_translate("MainWindow", "Έξοδα:"))
self.oplo_eco_lb.setText(_translate("MainWindow", "0"))
self.oplo_eco_title_lb.setText(_translate("MainWindow", "Οπλομαχία:"))
我还有一个运行所有代码的 main.py 文件。 在该文件中,我从我的谷歌日历中检索数据,并且我想为每个事件动态创建 QLabels。
这是我的 main.py 示例:
import datetime
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
from PyQt5.QtCore import Qt, QRect, QPropertyAnimation, QParallelAnimationGroup, QDate
from PyQt5 import QtGui, QtWidgets
from login_main import Ui_MainWindow
import google_calendar
import sys
import login_query
class LoginWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
global buttons_style
buttons_style = "QToolTip { background-color: black } QPushButton { border-left: 5px solid #88b1b2; border-radius: 13px 0px 0px 13px; background-color: #116466} "
global widgets
widgets = self.ui
global start_pos_x
start_pos_x = 150
global start_pro_y
start_pro_y = 150
self.baseHeight = 369
self.extendedHeight = 400
self.rect = QRect(start_pos_x, start_pro_y, 320, self.baseHeight)
self.setGeometry(self.rect)
# this will hide the title bar
self.setWindowFlag(Qt.FramelessWindowHint)
widgets.toggle_bt.clicked.connect(self.buttonClick)
widgets.home_bt.clicked.connect(self.buttonClick)
widgets.taek_bt.clicked.connect(self.buttonClick)
widgets.fencing_bt.clicked.connect(self.buttonClick)
widgets.oplo_bt.clicked.connect(self.buttonClick)
widgets.eco_bt.clicked.connect(self.buttonClick)
widgets.prese_bt.clicked.connect(self.buttonClick)
widgets.members_bt.clicked.connect(self.buttonClick)
####################################################
widgets.login_btn.clicked.connect(self.pressed)
####################################################
widgets.main_exit_btn.clicked.connect(self.close)
widgets.minim_btn.clicked.connect(self.showMinimized)
####################################################
widgets.main_exit2_btn.clicked.connect(self.close)
widgets.minim2_btn.clicked.connect(self.showMinimized)
####################################################
self.installEventFilter(self)
self.displayTime()
widgets.toolBar_fm.hide()
self.show()
def displayTime(self):
now = QDate.currentDate()
widgets.title_date.setText(now.toString(Qt.DefaultLocaleLongDate))
def buttonClick(self):
# GET BUTTON CLICKED
btn = self.sender()
btnName = btn.objectName()
#################
def pressed(self):
if (widgets.user_tb.text() == "" or widgets.user_tb.text() == "Username") and (
widgets.pass_tb.text() == "" or widgets.pass_tb.text() == "Password"):
widgets.info_lb.setText("No username and password")
print("No username and password inserted")
####################################
def refresh_calendar(self):
calendar_list = google_calendar.calendar_data.main(self)
if calendar_list[0] == "empty":
print("No Calendar Events")
widgets.calendar_error_lb.setText("No Calendar Events")
else:
print("Calendar List:")
print(calendar_list)
print("Each Item:")
for item in calendar_list:
dayWeek = datetime.datetime.strptime(item[0], '%d-%m-%Y').strftime('%A')
print(item[0], dayWeek, item[1], item[2], item[3])
HERE I WANT TO CREATE A LABEL FOR EACH ELEMENT IN calendar_list according the week day in my main window
if dayWeek == 'Monday':
pass
elif dayWeek == 'Tuesday':
pass
elif dayWeek == 'Wednesday':
pass
elif dayWeek == 'Thursday':
pass
elif dayWeek == 'Friday':
pass
#friday_fm
elif dayWeek == 'Saturday':
pass
elif dayWeek == 'Saturday':
pass
print("##################### END of Calendar event List ##############################")
def refresh_stats(self):
# MEMBERS STATS
members_array = login_query.connection.login_members_stats(self, widgets.user_tb.text(), widgets.pass_tb.text())
widgets.sum_members.setText(str(members_array[0]))
widgets.sum_tkd.setText(str(members_array[1]))
widgets.sum_fencing.setText(str(members_array[2]))
widgets.sum_oplo.setText(str(members_array[3]))
def keyPressEvent(self, qKeyEvent): # αναγνωριζει τα enter και καλει την συναρτηση οταν πατιεται το login button
print(qKeyEvent.key())
if qKeyEvent.key() == Qt.Key_Return or qKeyEvent.key() == Qt.Key_Enter:
self.pressed()
print('Enter pressed')
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.offset = event.pos()
else:
super().mousePressEvent(event)
def mouseMoveEvent(self, event):
if self.offset is not None and event.buttons() == Qt.LeftButton:
self.move(self.pos() + event.pos() - self.offset)
else:
super().mouseMoveEvent(event)
def mouseReleaseEvent(self, event):
self.offset = None
super().mouseReleaseEvent(event)
def resetStyle(self, btnName):
for w in self.ui.toolBar_fm.findChildren(QPushButton):
if w.objectName() != btnName:
w.setStyleSheet("")
print("resetStyle")
# Create the application object
if __name__ == "__main__":
app = QApplication(sys.argv)
window = LoginWindow()
sys.exit(app.exec_())
所以问题是如何在主窗口(和 Qframe 内部)中创建/添加标签而不在 main_ui.py 中添加代码。
请提前。
【问题讨论】:
-
创建一个布局并向其中添加小部件,然后将布局设置为
self.ui.main_fm。
标签: python pyqt5 qt-designer