Anonymous
Qlabel не отображает всю информацию
Сообщение
Anonymous » 08 ноя 2024, 00:55
Я использую mysqlconnector, PyQt5 и tabulate.
Это мой первый проект на Python+sql; Это мои первые пару недель, когда я пытаюсь изучить программирование, поэтому, пожалуйста, не сбивайте меня с толку.
Код: Выделить всё
#SQL Connection
import mysql.connector
from tabulate import tabulate
fitnessdb = mysql.connector.connect(
host="localhost",
user='root',
password='pass',
port='3306',
database='fitness'
)
mycursor = fitnessdb.cursor()
import sys
from PyQt5.QtCore import center
from PyQt5.QtWidgets import (QApplication, QMainWindow, QLabel, QWidget,
QPushButton, QVBoxLayout, QHBoxLayout, QGridLayout, QLineEdit,)
from PyQt5.QtGui import QIcon, QFont, QPixmap
from PyQt5.QtCore import Qt
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('Fitness Database')
self.setGeometry(0,0, 550, 700)
self.setWindowIcon(QIcon('icon.png'))
self.initUI()
def initUI(self):
central_widget = QWidget()
self.setCentralWidget(central_widget)
#First Prompt
self.button_add = QPushButton('Add', self)
self.button_add.show()
self.button_edit = QPushButton('Edit', self)
self.button_edit.show()
self.button_view = QPushButton('View', self)
self.button_view.show()
self.button_add.setStyleSheet('font-size: 60px;')
self.button_edit.setStyleSheet('font-size: 60px;')
self.button_view.setStyleSheet('font-size: 60px;')
self.button_add.clicked.connect(self.add_button_clicked)
self.button_edit.clicked.connect(self.edit_button_clicked)
self.button_view.clicked.connect(self.view_button_clicked)
#Return button
self.return_button = QPushButton('Return', self)
self.return_button.setStyleSheet('font-size: 40px;')
self.return_button.clicked.connect(self.initUI)
self.return_button.hide()
#Add prompt
self.line_liftName = QLineEdit(self) #lift name
self.line_liftName.setPlaceholderText('Enter a lift')
self.line_liftName.setStyleSheet('font-size: 30px;')
self.line_liftName.hide()
self.line_onerepmax =QLineEdit(self) #one rep max
self.line_onerepmax.setPlaceholderText('Enter your one-rep max (lbs)')
self.line_onerepmax.setStyleSheet('font-size: 30px;')
self.line_onerepmax.hide()
self.line_3repmax = QLineEdit(self) #3 rep max
self.line_3repmax.setPlaceholderText('Enter your three-rep max (lbs)')
self.line_3repmax.setStyleSheet('font-size: 30px;')
self.line_3repmax.hide()
self.add_submit_button = QPushButton('Submit', self)
self.add_submit_button.clicked.connect(self.add_submit_clicked)
self.add_submit_button.setStyleSheet('font-size: 60px;')
self.add_submit_button.hide()
self.success_return_lable = QLabel('Successfully added. Would you like to return?')
self.success_return_lable.setStyleSheet('font-size: 30px;')
self.success_return_lable.hide()
#View prompt
self.view_label = QLabel()
self.view_label.setStyleSheet('font-size: 10px;')
self.view_label.hide()
vbox = QVBoxLayout()
#First prompt
vbox.addWidget(self.button_add)
vbox.addWidget(self.button_edit)
vbox.addWidget(self.button_view)
#Add prompt
vbox.addWidget(self.line_liftName)
vbox.addWidget(self.line_onerepmax)
vbox.addWidget(self.line_3repmax)
vbox.addWidget(self.add_submit_button)
vbox.addWidget(self.success_return_lable)
vbox.addWidget(self.return_button)
#View prompt
vbox.addWidget(self.view_label)
central_widget.setLayout(vbox)
def add_button_clicked(self):
self.button_view.hide()
self.button_edit.hide()
self.button_add.hide()
self.line_liftName.show()
self.line_onerepmax.show()
self.line_3repmax.show()
self.add_submit_button.show()
def edit_button_clicked(self):
print('Edit Button Clicked')
self.button_edit.setText('Edited')
def view_button_clicked(self):
self.button_add.hide()
self.button_edit.hide()
self.button_view.hide()
select_all = ('SELECT lift_name, max_lift, 3repmax, pri_musc_group '
'FROM lifts JOIN muscle_groups ON lifts.pmg_id = muscle_groups.id')
mycursor.execute(select_all)
testList = mycursor.fetchall()
self.view_label.setText(tabulate(testList, headers=['Lift', 'Max', '3-Rep Max', 'Muscle Group'],
tablefmt='simple'))
self.view_label.show()
def add_submit_clicked(self):
lift_name = self.line_liftName.text() #lift name into SQL
lift_list = []
lift_list.append(lift_name)
insert_query = 'INSERT INTO lifts(lift_name) VALUES (%s)'
mycursor.execute(insert_query, lift_list)
fitnessdb.commit()
maxRep_input = self.line_onerepmax.text() #one rep into SQL
update_query = 'UPDATE lifts SET max_lift = %s WHERE lift_name = %s'
mycursor.execute(update_query, (maxRep_input, lift_name))
fitnessdb.commit()
rep3_input = self.line_3repmax.text()
update_query = 'UPDATE lifts SET 3repmax = %s WHERE lift_name = %s'
mycursor.execute(update_query, (rep3_input, lift_name))
fitnessdb.commit()
self.success_return_lable.show()
self.line_liftName.hide()
self.line_onerepmax.hide()
self.line_3repmax.hide()
self.add_submit_button.hide()
self.return_button.show()
def main():
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()
Вот результат:
Проблема: моя Qlabel 'view_label' не отображает более одной строки из базы данных и выглядит ужасно. (см. изображение).
Подробнее здесь:
https://stackoverflow.com/questions/791 ... nformation
1731016512
Anonymous
Я использую mysqlconnector, PyQt5 и tabulate. Это мой первый проект на Python+sql; Это мои первые пару недель, когда я пытаюсь изучить программирование, поэтому, пожалуйста, не сбивайте меня с толку. [code]#SQL Connection import mysql.connector from tabulate import tabulate fitnessdb = mysql.connector.connect( host="localhost", user='root', password='pass', port='3306', database='fitness' ) mycursor = fitnessdb.cursor() import sys from PyQt5.QtCore import center from PyQt5.QtWidgets import (QApplication, QMainWindow, QLabel, QWidget, QPushButton, QVBoxLayout, QHBoxLayout, QGridLayout, QLineEdit,) from PyQt5.QtGui import QIcon, QFont, QPixmap from PyQt5.QtCore import Qt class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle('Fitness Database') self.setGeometry(0,0, 550, 700) self.setWindowIcon(QIcon('icon.png')) self.initUI() def initUI(self): central_widget = QWidget() self.setCentralWidget(central_widget) #First Prompt self.button_add = QPushButton('Add', self) self.button_add.show() self.button_edit = QPushButton('Edit', self) self.button_edit.show() self.button_view = QPushButton('View', self) self.button_view.show() self.button_add.setStyleSheet('font-size: 60px;') self.button_edit.setStyleSheet('font-size: 60px;') self.button_view.setStyleSheet('font-size: 60px;') self.button_add.clicked.connect(self.add_button_clicked) self.button_edit.clicked.connect(self.edit_button_clicked) self.button_view.clicked.connect(self.view_button_clicked) #Return button self.return_button = QPushButton('Return', self) self.return_button.setStyleSheet('font-size: 40px;') self.return_button.clicked.connect(self.initUI) self.return_button.hide() #Add prompt self.line_liftName = QLineEdit(self) #lift name self.line_liftName.setPlaceholderText('Enter a lift') self.line_liftName.setStyleSheet('font-size: 30px;') self.line_liftName.hide() self.line_onerepmax =QLineEdit(self) #one rep max self.line_onerepmax.setPlaceholderText('Enter your one-rep max (lbs)') self.line_onerepmax.setStyleSheet('font-size: 30px;') self.line_onerepmax.hide() self.line_3repmax = QLineEdit(self) #3 rep max self.line_3repmax.setPlaceholderText('Enter your three-rep max (lbs)') self.line_3repmax.setStyleSheet('font-size: 30px;') self.line_3repmax.hide() self.add_submit_button = QPushButton('Submit', self) self.add_submit_button.clicked.connect(self.add_submit_clicked) self.add_submit_button.setStyleSheet('font-size: 60px;') self.add_submit_button.hide() self.success_return_lable = QLabel('Successfully added. Would you like to return?') self.success_return_lable.setStyleSheet('font-size: 30px;') self.success_return_lable.hide() #View prompt self.view_label = QLabel() self.view_label.setStyleSheet('font-size: 10px;') self.view_label.hide() vbox = QVBoxLayout() #First prompt vbox.addWidget(self.button_add) vbox.addWidget(self.button_edit) vbox.addWidget(self.button_view) #Add prompt vbox.addWidget(self.line_liftName) vbox.addWidget(self.line_onerepmax) vbox.addWidget(self.line_3repmax) vbox.addWidget(self.add_submit_button) vbox.addWidget(self.success_return_lable) vbox.addWidget(self.return_button) #View prompt vbox.addWidget(self.view_label) central_widget.setLayout(vbox) def add_button_clicked(self): self.button_view.hide() self.button_edit.hide() self.button_add.hide() self.line_liftName.show() self.line_onerepmax.show() self.line_3repmax.show() self.add_submit_button.show() def edit_button_clicked(self): print('Edit Button Clicked') self.button_edit.setText('Edited') def view_button_clicked(self): self.button_add.hide() self.button_edit.hide() self.button_view.hide() select_all = ('SELECT lift_name, max_lift, 3repmax, pri_musc_group ' 'FROM lifts JOIN muscle_groups ON lifts.pmg_id = muscle_groups.id') mycursor.execute(select_all) testList = mycursor.fetchall() self.view_label.setText(tabulate(testList, headers=['Lift', 'Max', '3-Rep Max', 'Muscle Group'], tablefmt='simple')) self.view_label.show() def add_submit_clicked(self): lift_name = self.line_liftName.text() #lift name into SQL lift_list = [] lift_list.append(lift_name) insert_query = 'INSERT INTO lifts(lift_name) VALUES (%s)' mycursor.execute(insert_query, lift_list) fitnessdb.commit() maxRep_input = self.line_onerepmax.text() #one rep into SQL update_query = 'UPDATE lifts SET max_lift = %s WHERE lift_name = %s' mycursor.execute(update_query, (maxRep_input, lift_name)) fitnessdb.commit() rep3_input = self.line_3repmax.text() update_query = 'UPDATE lifts SET 3repmax = %s WHERE lift_name = %s' mycursor.execute(update_query, (rep3_input, lift_name)) fitnessdb.commit() self.success_return_lable.show() self.line_liftName.hide() self.line_onerepmax.hide() self.line_3repmax.hide() self.add_submit_button.hide() self.return_button.show() def main(): app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_()) if __name__ == "__main__": main() [/code] Вот результат: Проблема: моя Qlabel 'view_label' не отображает более одной строки из базы данных и выглядит ужасно. (см. изображение). Подробнее здесь: [url]https://stackoverflow.com/questions/79168123/qlabel-not-displaying-all-information[/url]