RuntimeError: Gtk couldn't be initialized. Use Gtk.init_check() if you want to handle this case
RuntimeError: Gtk couldn't be initialized. Use Gtk.init_check() if you want to handle this case
我在 python 3.8.2 中编写了以下示例脚本:
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
class GridWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Grid Example")
grid = Gtk.Grid()
self.add(grid)
grid.set_row_spacing(2)
grid.set_column_spacing(4)
button1 = Gtk.Button(label="Button 1")
button2 = Gtk.Button(label="Button 2")
button3 = Gtk.Button(label="Button 3")
button4 = Gtk.Button(label="Button 4")
button5 = Gtk.Button(label="Button 5")
button6 = Gtk.Button(label="Button 6")
grid.add(button1)
grid.attach(button2, 1, 0, 2, 1)
grid.attach_next_to(button3, button1, Gtk.PositionType.BOTTOM, 1, 2)
grid.attach_next_to(button4, button3, Gtk.PositionType.RIGHT, 2, 1)
grid.attach(button5, 1, 2, 1, 1)
grid.attach_next_to(button6, button5, Gtk.PositionType.RIGHT, 1, 1)
win = GridWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
这只是虚拟示例。
我打算通过 crontab 文件上的 cron 条目 运行 此代码,但是当我这样做时,出现以下错误:
Unable to init server: Could not connect: Connection refused
Traceback (most recent call last):
File "/home/dggt/Vscode/scratches/PythonExamples/gui_example/gi_config/sample_grid.py", line 31, in <module>
win = GridWindow()
File "/home/dggt/Vscode/scratches/PythonExamples/gui_example/gi_config/sample_grid.py", line 9, in __init__
Gtk.Window.__init__(self, title="Grid Example")
File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 520, in __init__
raise RuntimeError(
RuntimeError: Gtk couldn't be initialized. Use Gtk.init_check() if you want to handle this case.
让这个错误更奇怪的是,当它通过我的 IDE 运行 时它完美地工作,换句话说,带有按钮的 window 显示在屏幕。
这是我的规格:
- Ubuntu 20.04
- python 3.8.2
这是我的 crontab 条目:
- */1 * * * * /bin/python3 /home/dggt/Vscode/scratches/PythonExamples/gui_example/gi_config/sample_grid.py
这是我的 cron 日志 header:
From dggt@dggt Mon Jun 29 11:21:01 2020
Return-Path: <dggt@dggt>
X-Original-To: dggt
Delivered-To: dggt@dggt
Received: by dggt (Postfix, from userid 1000)
id 4F71A87D05; Mon, 29 Jun 2020 11:21:01 -0300 (-03)
From: root@dggt (Cron Daemon)
To: dggt@dggt
Subject: Cron <dggt@dggt> /bin/python3 /home/dggt/Vscode/scratches/PythonExamples/gui_example/gi_config/sample_grid.py
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Cron-Env: <PATH=/home/dggt/.local/bin:/home/dggt/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/dggt>
X-Cron-Env: <LOGNAME=dggt>
Message-Id: <20200629142101.4F71A87D05@dggt>
Date: Mon, 29 Jun 2020 11:21:01 -0300 (-03)
有人知道哪里出了问题吗?我是否错过了一些必须先完成的预定义配置才能 运行 此脚本?
crontab 脚本未在 a full user session 中启动。显示服务器连接不会传播到您的脚本。
这就是您收到此消息的原因:
Unable to init server: Could not connect: Connection refused
然后告诉您 GTK 无法初始化显示连接。
crontab 脚本中未设置 DISPLAY
环境变量。仅设置 HOME
、LOGNAME
和 SHELL
。
快速修复 将在您的 cronscript 中添加变量。如@esbassi 链接的 Option 1 中所述。
在您的用户会话中:
echo $DISPLAY
:0.0
在您的 crontab 条目中:
*/1 * * * * export DISPLAY=':0.0'; /bin/python3 /home/dggt/Vscode/scratches/PythonExamples/gui_example/gi_config/sample_grid.py
我在 python 3.8.2 中编写了以下示例脚本:
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
class GridWindow(Gtk.Window):
def __init__(self):
Gtk.Window.__init__(self, title="Grid Example")
grid = Gtk.Grid()
self.add(grid)
grid.set_row_spacing(2)
grid.set_column_spacing(4)
button1 = Gtk.Button(label="Button 1")
button2 = Gtk.Button(label="Button 2")
button3 = Gtk.Button(label="Button 3")
button4 = Gtk.Button(label="Button 4")
button5 = Gtk.Button(label="Button 5")
button6 = Gtk.Button(label="Button 6")
grid.add(button1)
grid.attach(button2, 1, 0, 2, 1)
grid.attach_next_to(button3, button1, Gtk.PositionType.BOTTOM, 1, 2)
grid.attach_next_to(button4, button3, Gtk.PositionType.RIGHT, 2, 1)
grid.attach(button5, 1, 2, 1, 1)
grid.attach_next_to(button6, button5, Gtk.PositionType.RIGHT, 1, 1)
win = GridWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()
这只是虚拟示例。 我打算通过 crontab 文件上的 cron 条目 运行 此代码,但是当我这样做时,出现以下错误:
Unable to init server: Could not connect: Connection refused
Traceback (most recent call last):
File "/home/dggt/Vscode/scratches/PythonExamples/gui_example/gi_config/sample_grid.py", line 31, in <module>
win = GridWindow()
File "/home/dggt/Vscode/scratches/PythonExamples/gui_example/gi_config/sample_grid.py", line 9, in __init__
Gtk.Window.__init__(self, title="Grid Example")
File "/usr/lib/python3/dist-packages/gi/overrides/Gtk.py", line 520, in __init__
raise RuntimeError(
RuntimeError: Gtk couldn't be initialized. Use Gtk.init_check() if you want to handle this case.
让这个错误更奇怪的是,当它通过我的 IDE 运行 时它完美地工作,换句话说,带有按钮的 window 显示在屏幕。 这是我的规格:
- Ubuntu 20.04
- python 3.8.2
这是我的 crontab 条目:
- */1 * * * * /bin/python3 /home/dggt/Vscode/scratches/PythonExamples/gui_example/gi_config/sample_grid.py
这是我的 cron 日志 header:
From dggt@dggt Mon Jun 29 11:21:01 2020
Return-Path: <dggt@dggt>
X-Original-To: dggt
Delivered-To: dggt@dggt
Received: by dggt (Postfix, from userid 1000)
id 4F71A87D05; Mon, 29 Jun 2020 11:21:01 -0300 (-03)
From: root@dggt (Cron Daemon)
To: dggt@dggt
Subject: Cron <dggt@dggt> /bin/python3 /home/dggt/Vscode/scratches/PythonExamples/gui_example/gi_config/sample_grid.py
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Cron-Env: <PATH=/home/dggt/.local/bin:/home/dggt/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/dggt>
X-Cron-Env: <LOGNAME=dggt>
Message-Id: <20200629142101.4F71A87D05@dggt>
Date: Mon, 29 Jun 2020 11:21:01 -0300 (-03)
有人知道哪里出了问题吗?我是否错过了一些必须先完成的预定义配置才能 运行 此脚本?
crontab 脚本未在 a full user session 中启动。显示服务器连接不会传播到您的脚本。
这就是您收到此消息的原因:
Unable to init server: Could not connect: Connection refused
然后告诉您 GTK 无法初始化显示连接。
crontab 脚本中未设置 DISPLAY
环境变量。仅设置 HOME
、LOGNAME
和 SHELL
。
快速修复 将在您的 cronscript 中添加变量。如@esbassi 链接的 Option 1 中所述。
在您的用户会话中:
echo $DISPLAY
:0.0
在您的 crontab 条目中:
*/1 * * * * export DISPLAY=':0.0'; /bin/python3 /home/dggt/Vscode/scratches/PythonExamples/gui_example/gi_config/sample_grid.py