我一直在开发工作应用程序,遇到了一些困境。以下代码将成功将新选项卡添加到我的tabWidget,设置选项卡的标题,加载外部UI,在按下两个按钮之一时生成文件或预览文件,并在从菜单位置打开时设置为当前选项卡:
def strap6_gui(self): #Create new tab and load TMS6 Strapping UI
self.strap6 = QtGui.QWidget(self.tabWidget)
self.tabWidget.addTab(self.strap6, 'TMS6 Tank Strapping')
uic.loadUi(strap6, self.strap6)
self.strap6.strap6_generate.clicked.connect(self.strap6_func)
self.strap6.strap6_previewButton.clicked.connect(self.strap6_prev)
self.tabWidget.setCurrentWidget(self.strap6)
问题是这样的:以下代码是从上面复制并略作修改的,并没有做它应该做的事情。它将打开一个新选项卡并设置标题,但此新选项卡不会设置为当前选项卡或加载 ui 文件:
def txled_gui(self): #Create new tab and load TMS6 Strapping UI
self.txled = QtGui.QWidget(self.tabWidget)
self.tabWidget.addTab(self.txled, 'TMS6 Tank Strapping')
uic.loadUi(txui, self.txled)
self.txled.strap6_generate.clicked.connect(self.strap6_func)
self.txled.strap6_previewButton.clicked.connect(self.strap6_prev)
self.tabWidget.setCurrentWidget(self.txled)
当我处理这个问题时,我复制了 strap6.ui 并将其重命名为 txui.ui,这样我就可以判断选项卡是否从文件位置获取信息。文件位置设置为:
strap6 = os.path.abspath('.UIstrap6_gui.ui')
txui = os.path.abspath('.UItxled_gui.ui')
我还有其他一些 UI 作为弹出窗口加载,这些弹出窗口位于同一目录中并以相同的方式调用,所以我知道这不是问题。最后,这是我运行应用程序时控制台中显示的错误消息:
IOError: [Errno 22] invalid mode ('rb') or filename: 'C:\Users\Seth\Documents\TSE\pythonTesting\TriadGUI\UItxled_gui.ui'
为什么第一个 def 可以正常工作,而第二个 def 是第一个副本,并且设置了带有新名称等?
我想你会踢自己。
txui
有一个制表符,因为您没有转义反斜杠。
所以你需要:
txui = os.path.abspath(r'.UItxled_gui.ui')
或:
txui = os.path.abspath('.\UI\txled_gui.ui')