gpt4 book ai didi

python - PyQt 小部件重新加载或刷新

转载 作者:太空宇宙 更新时间:2023-11-03 16:55:41 25 4
gpt4 key购买 nike

我的问题是,当我在小部件“Form1”上选择名称时,该名称会写入文件。当我单击小部件“Form1”上的“确定”按钮时,我在之前选择的小部件“Form2”上看不到相同的名称。

问题是小部件“Form2”不是最新的。我尝试在小部件“Form2”的开头插入 self.update 但它不起作用。如何刷新小部件“Form2”或重新加载文件内容?

我有一个简单的代码:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import sys

from functools import partial
from PyQt4.QtGui import *
from PyQt4.QtCore import *
from PyQt4 import QtGui, QtCore
from math import sqrt
from time import gmtime, strftime

class Form1(QWidget):
showForm2Signal = pyqtSignal()

def __init__(self, parent=None):
super(Form1, self).__init__(parent)

self.label = QtGui.QLabel(self)
self.label.setGeometry(0, 40, 480, 400)
self.label.move(0,40)

#Select name
self.styleTerminalSettings = QtGui.QLabel("Please select your name:", self)
self.styleTerminalSettings.move(20,40)
self.styleTerminalSettings.resize(250,30)
self.styleTerminalSettings.setStyleSheet("color: black; background-color: transparent; font-size: 12pt; font-weight: bold;")

self.comboBox = QtGui.QComboBox(self)
self.comboBox.addItem("NAME 1")
self.comboBox.addItem("NAME 2")
self.comboBox.addItem("NAME 3")
self.comboBox.addItem("NAME 4")
self.comboBox.move(20,80)
self.comboBox.resize(440,50)
self.comboBox.currentIndexChanged.connect(self.selectionchange)

#OK button
self.ok_button = QtGui.QPushButton("OK", self)
self.ok_button.resize(self.ok_button.minimumSizeHint())
self.ok_button.move(0,340)
self.ok_button.resize(480,60)
self.ok_button.setStyleSheet("color: #25373D; background-color: #71BA51; font-size: 16pt; font-weight: bold;")

layout = QVBoxLayout(self)

self.ok_button.clicked.connect(self.showForm2Signal.emit)

def selectionchange(self,i):
pos_user_name = self.comboBox.currentText()
self.users_write(pos_user_name)

#Name write to file
def users_write(self, pos_user_name):
filename = "user_name_session"

target = open(filename, 'w')
target.truncate()
target.write(pos_user_name)
target.close()

class Form2(QWidget):
def __init__(self, parent=None):
super(Form2, self).__init__(parent)

global pos_user_name

self.label = QtGui.QLabel(self)
self.label.setGeometry(0, 40, 480, 400)
self.label.move(0,40)

#Name read from file
filename = "user_name_session"
target = open(filename, "r+")
name = target.read(10);

self.styleCashRegister = QtGui.QLabel("Name:", self)
self.styleCashRegister.move(20,40)
self.styleCashRegister.resize(170,30)
self.styleCashRegister.setStyleSheet("color: black; background-color: transparent; font-size: 16pt; font-weight: bold;")

self.cashregisterid = QtGui.QLineEdit(self)
self.cashregisterid.setText(str(name))
self.cashregisterid.move(100, 40)
self.cashregisterid.resize(260,30)
self.cashregisterid.setStyleSheet("color: #25373D; font-size: 16pt; font-weight: bold;")

class MainWidget(QWidget):
def __init__(self, parent=None):
super(MainWidget, self).__init__(parent)
self.stack = QStackedWidget()
layout = QVBoxLayout(self)
layout.addWidget(self.stack)
layout.setContentsMargins(0, 0, 0, 0)

self.setGeometry(0, 0, 480, 400)
self.setWindowTitle("PYQT WIDGET TEST")
self.setStyleSheet("background-color: #E8E8E8")

self.form1 = Form1(self)
self.form2 = Form2(self)

self.stack.addWidget(self.form1)
self.stack.addWidget(self.form2)

self.form1.showForm2Signal.connect(partial(self.stack.setCurrentWidget,self.form2))

self.stack.setCurrentWidget(self.form1)

if __name__ == '__main__':
app = QApplication(sys.argv)
w = MainWidget()
w.show()
app.exec_()
sys.exit()

最佳答案

有几种方法可以做到这一点。您需要的第一件事是 form2 上的“刷新”功能,它将更新 form2 上的文本。

def refresh(self):
filename = "user_name_session"
target = open(filename, "r+")
name = target.read(10);
self.cashregisterid.setText(str(name))

您需要的第二件事是每当重写文件时调用该刷新函数的方法。

您可以仅使用 form1 已发出的现有信号来显示 form2。在您的 MainWidget 中,将该信号连接到刷新函数

self.form1.showForm2Signal.connect(self.form2.refresh)

关于python - PyQt 小部件重新加载或刷新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35439787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com