我正在尝试创建一个小型数据库应用程序,以将所有客户端保留在其中。我想使用PyQt5编写GUI。我在了解应用程序结构应如何时遇到问题。 我想有一个主类来启动应用程序,我想将GUI,DB和Main类分别放在不同的文件中。
您可以在下面看到我的代码段。这是行不通的,因为某些变量无法识别,而且我不明白为什么。
我的想法: 1.在窗口中,将在主类 init 函数中创建tab1对象 2.创建window时,创建tab1实例,其 init 中的方法将被调用 3.我有window,tab1对象,并且变量本身可用
没有为TabNewClient类定义window.gbT1Main.setLayout(T1LayMain)。为什么呢我应该如何更改代码以实现上述要求?请解释一下我该如何连接我的课程:(
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:未定义名称“窗口”
答案 0 :(得分:0)
要回答为什么您会收到有关未定义“窗口”的错误的问题,我相信这是因为window
类中没有TabNewClient
变量。似乎您正在尝试引用window
中定义的Main
,但由于该变量不在TabNewClient
类的范围内,因此该方法不起作用。我的猜测是,您将遇到gbT1Main
的同一问题,因为这同样不在TabNewClient
类的范围内。
编辑:我想我了解您在这里尝试的内容。您希望gbT1Main
中与window
相关的标签保留tab1
中的布局。为此,您需要在window
中设置Main
的布局:
from PyQt5.QtWidgets import QApplication
import sys
from guiv3 import Window, TabNewClient
class Main:
def __init__(self):
window = Window()
tab1 = TabNewClient()
window.gbT1Main.setLayout(tab1.T1LayMain)
if __name__ == "__main__":
app = QApplication(sys.argv)
main = Main()
app.exec_()
这很可能是您要寻找的东西。
重要提示::这还要求T1LayMain
是TabNewClient
类的属性,因此请在该类内部使用self.T1LayMain
,以便可以在其外部进行访问