- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我是 PySide 的新手。我有一个主窗口对象,它一次显示一个小部件。我一直在尝试更改 QMainWindow
类的中央小部件,以便在按下按钮时替换窗口中的可见小部件。问题是按下的按钮在 Widget 类中,而不是在主窗口类中。
说...
class App(QtGui.QMainWindow):
def __init__(self):
super(App, self).__init__()
self.initUI()
def initUI(self):
self.statusBar().showMessage('Listo.') #Status Bar
self.login_screen = LoginScreen()
self.logged_in_screen = LoggedInScreen()
self.setCentralWidget(self.login_screen)
self.setGeometry(300, 300, 450, 600) #Window Size
self.setWindowTitle('PyTransactio - Client') #Window Title
self.setWindowIcon(QtGui.QIcon('icon.png')) #App Icon
self.show()
按下的按钮在 login_screen
实例中。单击按钮时调用的方法位于 LoginScreen
类中:
def login(self):
""" Send login data to the server in order to log in """
#Process
self.setParent(None)
将父小部件设置为 None
将从主窗口中删除小部件 (login_screen
)。当 loginButton
(在 login_screen
小部件)被按下?
也许登录方法应该在主窗口类中?如果是这样,我如何将 login_screen
中按下的按钮与主窗口的方法连接起来?
最佳答案
您可以使用 QStackedWidget
作为中央小部件,并向其添加登录屏幕和“已登录”屏幕。
用法示例:
from PyQt4 import QtCore, QtGui
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.central_widget = QtGui.QStackedWidget()
self.setCentralWidget(self.central_widget)
login_widget = LoginWidget(self)
login_widget.button.clicked.connect(self.login)
self.central_widget.addWidget(login_widget)
def login(self):
logged_in_widget = LoggedWidget(self)
self.central_widget.addWidget(logged_in_widget)
self.central_widget.setCurrentWidget(logged_in_widget)
class LoginWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(LoginWidget, self).__init__(parent)
layout = QtGui.QHBoxLayout()
self.button = QtGui.QPushButton('Login')
layout.addWidget(self.button)
self.setLayout(layout)
# you might want to do self.button.click.connect(self.parent().login) here
class LoggedWidget(QtGui.QWidget):
def __init__(self, parent=None):
super(LoggedWidget, self).__init__(parent)
layout = QtGui.QHBoxLayout()
self.label = QtGui.QLabel('logged in!')
layout.addWidget(self.label)
self.setLayout(layout)
if __name__ == '__main__':
app = QtGui.QApplication([])
window = MainWindow()
window.show()
app.exec_()
如果您不想使用这个小部件,那么我认为您每次更改中央小部件时都必须调用 QMainWindow.setCentralWidget
。
至于login
方法应该放在哪里,这要看情况。也许你可以为你的主窗口定义一个简单的接口(interface)来添加/删除/显示特定的中央小部件,并从 LoginScreen
的 login
方法调用它。通过这种方式,LoginScreen
类不必了解实现细节,例如中央小部件是否实际上是一个 QStackedWidget
或者这件事是否以其他方式完成。
关于python - 替换 MainWindow 中的 CentralWidget,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13550076/
我做了我的研究,人们倾向于使用 ViewModel 来实现这一点,但我有点陷入其中。 我有一个 public ObservableCollection orderList { get; set; }
当用户更改主题时,我使用 mainWindow.webContents.send 更改 DOM 中的类。我还将它保存在商店中,在键 theme 下。 mainWindow.webContents.se
所以我有一个名为 MainWindow 的空主框架和一个 WelcomeWidget,它在程序启动时立即调用并加载到主框架中。然后我想要 WelcomeWidget 中的按钮 next_btn 调用
像a一样用slot和signal连接就对了 connect( ui->widget, SIGNAL( GetSquareParameters( int &, int &,int &,int &)),
我正在尝试构建一个桌面应用程序,使用 Electron 在 web View 中打开 gmail。在我的主文件中,我已经加载了这样的网址 mainWindow.loadURL("https://gma
在我的 (Py)Qt4 应用程序中,直到用户使用 command-tab 切换离开应用程序,然后使用 command-tabs 切换回它,主窗 Eloquent 会出现。 奇怪的是这个问题仅在双击启动
我有一个带有菜单的MainWindow,可以打开一个注册对话框。如何在注册后更新 MainWindow 中的 tableView? 这是我的 MainWindow 实现: MainWindow::Ma
我想使用 PyQt5 和 QtDesigner 开始一个新项目。首先,我只是复制了 PyQt4 中以前项目中的代码,并将其调整为 PyQt5 中的更改。因此,启动 Main Window 和更新应用程
我正在尝试制作一个包含 MainWindow.cpp 和一个 dialog1.cpp 的程序,我需要将一个字符串从我的对话框的 QLineEdit 传递到 MainWindow.cpp 中的一个函数。
我有一个使用 Qt Designer 制作的 PyQt5 MainWindow。 这个窗口应该抓取网站并在找到后在 TreeView 中列出抓取的链接。 每次抓取新链接时,我都可以创建一个模型 QSt
我理解 Static 和 Instance 的概念,但我很困惑,当我有一个只有 1 个实例的类时,我应该使用哪个实例,这是在我的应用程序开始时调用的实例 (=Application.Current .
我正在尝试将 MainWindow 的 DataContext 设置为其在 App.OnStartup 中的 ViewModel。我注意到这样做时,MainWindow() 构造函数被调用了两次,我看
是否可以将相对于 MainWindow 的点转换为相对于其子控件之一?例如,假设一个控件的左上角位于 500, 500 相对于 MainWindow 什么代码会将该数字转换为 (0, 0)?我希望解决
所以我按照以下网站上的指南来限制文本框可以接受的字符。 http://www.rhyous.com/2010/06/18/how-to-limit-or-prevent-characters-in-a
我目前正在使用 QT Creator 创建用于查看的 UI 文件,我是 QT 初学者。 有一部分我很好奇,我如何创建另一个类,比如 GraphicView,以便我可以将信号和槽发送到该类而不是主窗体?
我在 MainWindow.xaml.cs 中有这个: public partial class MainWindow : Window { public double _frameCount
我有用户控件,它有两个控件 标签 和 文本 block 并且在我的 MainWindow 中,我有一个 List
我有一个关于 Scope 的初学者问题。在 MainWindow 类中,我创建了用于数据绑定(bind)的 ModelView 类的实例,以及具有要显示的 Leaves 属性的 Cabbage 类的实
首先,在主窗口中看到这段代码 我创建了一个名为 RightPanel 的用户控件,并将其命名为 MainWindow.xaml rightPanel 例如,在用户
首先,在主窗口中看到这段代码 我创建了一个名为 RightPanel 的用户控件,并将其命名为 MainWindow.xaml rightPanel 例如,在用户
我是一名优秀的程序员,十分优秀!