【发布时间】:2019-08-08 17:18:27
【问题描述】:
我正在尝试创建一个小型数据库应用程序以将所有客户端保留在内部。我想使用 PyQt5 编写 GUI。我无法理解应用程序结构的外观。 我想要一个启动应用程序的主类,并且我想将 GUI、DB 和 Main 类分开在不同的文件中。
你可以在下面看到我的代码 sn-ps。它不起作用,因为某些变量无法识别,实际上我不明白为什么。
我的想法: 1.窗口,tab1对象将在主类init函数中创建 2、window、tab1实例创建后,其init里面的方法会被调用 3. 我有 window, tab1 对象,它的变量可以自己使用
window.gbT1Main.setLayout(T1LayMain) 没有为 TabNewClient 类定义。为什么 ?我应该如何更改我的代码以实现上述要求?请解释我应该如何连接我的课程:(
Window 和 TabNewClient 类(窗口,tab1)
from PyQt5.QtWidgets import QApplication, QDialog, QTabWidget, QGroupBox, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QFormLayout, QLineEdit, QDateEdit, QTextEdit, QRadioButton, QGridLayout
import sys
import datetime
class Window(QDialog):
def __init__(self):
super().__init__()
self.InitWindow()
def InitWindow(self):
# create tab widget
self.tab = QTabWidget()
# create MainWindow groupbox
self.gbMainWindow = QGroupBox()
# TAB groupBoxes
self.gbT1Main = QGroupBox()
self.gbT2Main = QGroupBox("Main2")
self.gbT3Main = QGroupBox("Main3")
# Adding tabs
self.tab.addTab(self.gbT1Main, "Dodaj klienta")
self.tab.addTab(self.gbT2Main, "Wyszukaj")
self.tab.addTab(self.gbT3Main, "Statystki")
# Setting MainWindow title
self.setWindowTitle("MEDIKAP - gabinet medycyny pracy")
# Main Window Layout
self.layMainWindow = QHBoxLayout()
# Set MainWindow Layout
self.layMainWindow.addWidget(self.tab)
self.gbMainWindow.setLayout(self.layMainWindow)
# set MainWindow layout visible
self.setLayout(self.layMainWindow)
#show window
self.show()
class TabNewClient:
def __init__(self):
self.CreateTab1Layout()
def CreateTab1Layout(self):
self.gbAddClient = QGroupBox("Dane klienta")
self.gbRodzajBadania = QGroupBox("Podstawa prawna")
self.gbDane = QGroupBox()
self.gbComment = QGroupBox("Komentarz")
self.gbButtons = QGroupBox()
# TAB1 - layouts
T1LayMain = QVBoxLayout()
layDane = QHBoxLayout()
# TAB1
layDane.addWidget(self.gbAddClient)
layDane.addWidget(self.gbRodzajBadania)
self.gbDane.setLayout(layDane)
# TAB1 - set layout to Main
T1LayMain.addWidget(self.gbDane)
T1LayMain.addWidget(self.gbComment)
T1LayMain.addWidget(self.gbButtons)
window.gbT1Main.setLayout(T1LayMain)
主类:
from PyQt5.QtWidgets import QApplication
import sys
from guiv3 import Window, TabNewClient
class Main:
def __init__(self):
window = Window()
tab1 = TabNewClient()
if __name__ == "__main__":
app = QApplication(sys.argv)
main = Main()
app.exec_()
错误: window.gbT1Main.setLayout(T1LayMain) NameError: 名称“窗口”未定义
【问题讨论】:
-
您能否向我们展示完整的追溯?
-
关于结构,google for MVC - Model - View - Controller,这是一种比较常见的软件设计模式。数据库是模型,视图是应用程序。两者都是分开的东西。它们由一个控制器连接,在它们之间进行协商。